Worum es geht
Jede Anfrage an CDMS muss mehrere Fragen bestehen, bevor Daten fließen. Die Fragen stehen auf drei Ebenen:
| Ebene | Frage | Womit CDMS sie beantwortet |
|---|---|---|
| Modell | Darfst du diese Operation auf diesem Modell ausführen? | einer Rolle im Token, z. B. hr-employee-read |
| Beziehung | Darfst du über dieses Feld in ein anderes Modell hinein? | der Rolle des anderen Modells oder einer Feldrolle an der Beziehung |
| Zeile | Darfst du genau dieses Objekt sehen oder ändern? | Filtern: eigene Daten, Attributfilter, eigene Filter des Projekts |
Eine Rolle ist ein Name wie hr-employee-read, der im Token der Person steht. Ein Filter ist eine Bedingung, die CDMS unsichtbar an jede Abfrage hängt, etwa „nur Zeilen dieser Person“.
Der Trichter
Vor den drei Ebenen steht noch der Mandant. Er ist keine Prüfung in CDMS, sondern legt fest, in welcher Datenbank CDMS überhaupt sucht.
flowchart TB
T["Token und Mandant<br/>CIAS prüft das Token, wählt den Mandanten"] --> M
M["Modell<br/>Rolle für die Operation?"] --> B
B["Beziehung<br/>Rolle des Zielmodells oder Feldrolle?"] --> Z
Z["Zeile<br/>eigene Daten, Attributfilter, eigene Filter"] --> D["Daten"]
T -. "kein oder ungültiges Token" .-> E1["401 / 403"]
M -. "Rolle fehlt" .-> E2["403"]
B -. "Rolle fehlt" .-> E3["403"]
Z -. "Zeile unsichtbar" .-> E4["404 oder nicht in der Liste"]
Was vor CDMS passiert, also Token prüfen und Mandant wählen, steht unter Zugriff ohne Token und Mandanten.
Die Ebenen beim Lesen
-
CDMSModellHast du die Leserolle von
employee?↳ nein 403missing-permission|<leserolle> -
CDMSZeileLassen die Filter von
employeediese Zeile durch?↳ nein 404not-found -
CDMSBeziehungDie
responsenenntcompany. Hast du die Leserolle voncompanyoder die Feldrolle anemployee.company?↳ nein 403missing-permission|<rolle> -
CDMSZeile der FirmaLassen die Filter von
companydie Firma durch?↳ neincompanyistnull, kein Fehler - 200 mit Mitarbeiter und Firma
Beim Suchen gilt dasselbe, nur fehlen unsichtbare Zeilen einfach in der Liste. Siehe Filter, die immer mitlaufen.
Die Ebenen beim Ändern und Löschen
Beim Schreiben ist die Reihenfolge anders: Erst prüft CDMS die Zeile, dann die Rolle.
-
CDMSZeileGibt es die Zeile, und lassen die Filter sie durch? Dieselben Filter wie beim Lesen.↳ nein 404
not-found|<Dto>|<id> -
CDMSModellHast du die Änderungsrolle von
employee?↳ nein 403missing-permission|<änderungsrolle> -
CDMSBeziehungÄndert die Anfrage ein Kind mit? Dann brauchst du dessen Rolle oder die Feldrolle.↳ nein 403
missing-permission|<rolle> - 200, geändert und zurückgelesen
So verrät CDMS nicht, ob es ein fremdes Objekt gibt: Wer es nicht sehen darf, bekommt 404, egal welche Rollen er hat. Siehe Warum Unsichtbares 404 liefert.
Die Ebenen im Vergleich
- gilt nur für den Weg über dieses Feld
- fehlt → 403
- Details: Feldrollen
- gilt für einzelne Objekte
- unsichtbar → 404 oder fehlt in der Liste
- Details: Eigene Daten, Attributfilter, Eigene Filter
Einfache Felder haben keine eigene Ebene. Wer ein Modell lesen darf, darf seine einfachen Felder lesen, außer ein Feld trägt eine eigene Rolle. Dann braucht er zusätzlich diese Rolle, sonst fehlt das Feld in der Antwort. Siehe Geschützte Werte.
Varianten
Wann: read, query
-
1CDMSprüft die Leserolle des Modells
-
2CDMS→Databaseliest nur Zeilen, die alle Filter durchlassen
-
3CDMSprüft für jede Beziehung in der
responsedie Rolle des Zielmodells oder die Feldrolle
Ergebnis: Rolle fehlt → 403. Unsichtbar → 404 beim Lesen per id, bei der Suche fehlt die Zeile.
Wann: PUT, PATCH, DELETE, rollback
-
1CDMS→Databasezählt die Zeile mit den Filtern des Lesens
-
2CDMSprüft die Rolle des Modells für die Operation
-
3CDMSprüft für jedes mitgeänderte oder mitgelöschte Kind dessen Rolle oder die Feldrolle
Ergebnis: Erst 404, dann 403. Eine Leserolle brauchst du dafür nicht.
Wann: create
-
1CDMSprüft die Anlegerolle des Modells
-
2CDMSprüft für jedes mitangelegte Kind dessen Rolle oder die Feldrolle
-
3CDMSliest das neue Objekt zurück, dafür braucht es die Leserolle
Ergebnis: Die Zeilen-Ebene prüft hier nur beim Zurücklesen. Bei Benutzer-Modellen setzt CDMS den Besitzer selbst, siehe Eigene Daten.
Fallen
Wie es weitergeht
- Welche Rolle welche Operation verlangt: Modellrollen
- Wie die Namen gebildet werden: Wie Rollennamen entstehen
- Rechte über eine Beziehung: Rechte auf Beziehungen (Feldrollen)
- Was bei fehlender Rolle ohne Strict Mode passiert: Strict Mode