Worum es geht
Was soll passieren, wenn eine Anfrage etwas verlangt, das nicht erlaubt ist? Es gibt zwei Antworten:
- Strikt: CDMS lehnt die Anfrage mit einem Fehler ab, der genau sagt, was fehlt.
- Tolerant: CDMS lässt weg, was nicht erlaubt ist, und liefert den Rest. Wo das nicht geht, kommt ein allgemeinerer Fehler.
Welche Antwort gilt, legt der Strict Mode fest. Er ist standardmäßig an.
Wo er eingestellt wird
Der Strict Mode gilt für eine ganze CDMS-Instanz: für alle Modelle und alle Anfragen. Du stellst ihn über die Umgebungsvariable STRICT_MODE ein. Fehlt sie, gilt true.
Ein Client kann ihn nicht umschalten, und ein einzelnes Modell kann nicht anders eingestellt sein.
Die Matrix
| Fall | Strict Mode an | Strict Mode aus |
|---|---|---|
lesen per id, Leserolle fehlt | 403 missing-permission|<leserolle> | 404 not-found |
| suchen, Leserolle fehlt | 403 missing-permission|<leserolle> | 403 empty-request-left |
Einzelreferenz in der response, Rolle fehlt | 403 missing-permission|<rolle> | Feld ist null, kein Fehler |
Liste in der response, Rolle fehlt | 403 missing-permission|<rolle> | 403 empty-request-left für die ganze Anfrage |
| anlegen, Rolle fehlt | 403 missing-permission|<rolle> | 403 missing-create-role |
| ändern (PUT, PATCH), Rolle fehlt | 403 missing-permission|<rolle> | 403 missing-update-role |
| löschen, Rolle fehlt, auch in der Kaskade | 403 missing-permission|<rolle> | 403 missing-delete-role |
| Historie lesen, Rolle fehlt | 403 missing-permission|<rolle> | 403 missing-read-role / missing-history-role |
| Rollback, Rolle fehlt | 403 missing-permission|<rolle> | 403 missing-rollback-role |
| Kind mitanlegen oder mitändern, Rolle und Feldrolle fehlen | 403 missing-permission|<feldrolle oder rolle> | 403 missing-create-role / missing-update-role |
| neues Kind in einer Liste, Beziehung ohne CREATE | 400 recursive-create-not-allowed|<feld> | Eintrag wird übergangen |
| neues Kind als Einzelreferenz, Beziehung ohne CREATE | 400 recursive-create-not-allowed|<feld> | das Feld wird leer |
Die letzten beiden Zeilen betreffen keine Rolle, sondern die Flags der Beziehung. Siehe Die vier Fälle beim verschachtelten Schreiben.
Strikt und tolerant im Vergleich
- jede fehlende Rolle → 403
- der Schlüssel nennt die fehlende Rolle
- der Client weiß sofort, welche Rolle er braucht
- gleiche Anfrage, gleiches Ergebnis für jede Person
- Einzelreferenzen ohne Rolle werden
null - Lesen per
idohne Rolle → 404 - Schreiben → 403 ohne Rollennamen
- eine Antwort mit
nullsieht aus wie ein leeres Feld
Beim Lesen im Einzelnen
| Strict Mode | Rolle employee | Rolle company | Antwort |
|---|---|---|---|
| an | nein | – | 403 missing-permission|<rolle von employee> |
| an | ja | nein | 403 missing-permission|<rolle von company> |
| aus | nein | – | 404 not-found |
| aus | ja | nein | 200, company ist null |
| – | ja | ja | 200 mit Firma |
Warum strikt der Standard ist
- Fehler fallen auf. Eine fehlende Rolle zeigt sich beim ersten Test, nicht erst, wenn eine Person sich über leere Felder wundert.
nullbleibt eindeutig. Mit Strict Mode heißtnullin einer Antwort: nicht gesetzt oder unsichtbar. Ohne ihn kann es auch heißen: Rolle fehlt.- Der Schlüssel hilft.
missing-permission|audit-question-readsagt dir genau, welche Rolle du vergeben musst.
Die Filter der Zeilen-Ebene hängen nicht vom Strict Mode ab. Unsichtbare Zeilen liefern immer 404 oder fehlen in der Liste. Siehe Warum Unsichtbares 404 liefert.
Fallen
Wie es weitergeht
- Welche Rolle welche Operation verlangt: Modellrollen
- Rechte über eine Beziehung: Rechte auf Beziehungen (Feldrollen)