CodamAIDocs
Themafertig

Modellrollen

Welche Rolle eine Operation verlangt: Basisrolle, Rolle je Aktion, Endpunkt-Rolle, öffentlicher Zugriff. PATCH nutzt die Update-Rolle.

Ausprägungen
Basisrolle erlaubt allesAktionsrolle ersetzt die BasisrolleEndpunkt-RollepublicAccesshistory, rollback, downloadabstraktes Modell

Worum es geht

Jedes Modell hat Rollen. Bevor CDMS eine Operation ausführt, prüft es, ob die passende Rolle im Token der Person steht. Fehlt sie, antwortet CDMS mit 403 missing-permission|<rolle>.

Es gibt zwei Arten von Modellrollen:

  • Die Basisrolle heißt wie das Modell, z. B. audit-question. Sie erlaubt jede Operation, für die nichts Strengeres festgelegt ist.
  • Eine Aktionsrolle hängt die Operation an, z. B. audit-question-read. Es gibt sie nur für Operationen, die du im Hub als rollenpflichtig markiert hast.

Wie die Namen entstehen, steht unter Wie Rollennamen entstehen.

Welche Operation welche Rolle verlangt

Im Hub markierst du im Reiter Berechtigungen die Operationen CREATE, READ, UPDATE und DELETE. Jede markierte Operation bekommt ihre Aktionsrolle, alle anderen verlangen die Basisrolle.

OperationEndpunktVerlangte Rolle
AnlegenPOST /create, Upload beim AnlegenAnlegerolle
LesenPOST /read/{id}, GET /read/{id}Leserolle
SuchenPOST /queryLeserolle
ErsetzenPUT /update/{id}Änderungsrolle
ÄndernPATCH /update/{id}, Upload beim ÄndernÄnderungsrolle, denn PATCH hat keine eigene Rolle
LöschenDELETE /delete/{id}Löschrolle
HerunterladenGET /{id}/fileerst Leserolle (das Objekt wird gelesen), dann Download-Rolle
Historie lesenPOST /{id}/historyLeserolle und Historienrolle
ZurücksetzenPOST /{id}/rollback/{revision}Rollback-Rolle

Download, Historie und Rollback lassen sich im Hub nicht einzeln markieren. Sie verlangen deshalb die Basisrolle.

Welche Rolle verlangt READ bei Modell question im Ordner audit?
READ im Hub markiertEndpunkt mit eigener RolleEndpunkt mit publicAccessVerlangte Rolle
neinneinneinaudit-question
janeinneinaudit-question-read
–ja, z. B. report-readerneinreport-reader
––jakeine Rolle, jede angemeldete Person

Varianten

Wie ein Modell seine Rollen festlegt

Wann: im Hub keine Operation markiert

  1. 1
    Build
    setzt für jede Operation die Basisrolle audit-question
  2. 2
    CDMS
    prüft bei jeder Operation dieselbe Rolle

Ergebnis: Eine Rolle für alles. Einfach, aber ohne Unterschied zwischen Lesen und Schreiben.

Wann: im Hub z. B. READ markiert

  1. 1
    Build
    setzt für READ audit-question-read, für alle anderen Operationen weiter audit-question
  2. 2
    CDMS
    prüft beim Lesen und Suchen nur noch audit-question-read
  3. 3
    CDMS
    prüft beim Anlegen, Ändern und Löschen weiter audit-question

Ergebnis: Leser bekommen audit-question-read, Bearbeiter audit-question und audit-question-read, wenn sie auch lesen sollen.

Wann: Modelldatei (YAML): Endpunkt mit roleRequired: <name>

  1. 1
    Build
    übernimmt den Namen unverändert als Rolle für diese Operation
  2. 2
    CDMS
    prüft genau diesen Namen

Ergebnis: Der eigene Name gilt vor Basis- und Aktionsrolle. Im Hub gibt es diese Angabe nicht.

Wann: Modelldatei (YAML): Endpunkt mit publicAccess: true

  1. 1
    Build
    setzt für diese Operation keine Rolle
  2. 2
    CDMS
    überspringt die Rollenprüfung

Ergebnis: Jede Person mit gültigem Token darf die Operation ausführen. Ohne Token geht es trotzdem nicht, siehe Zugriff ohne Token. Die Filter der Zeilen-Ebene gelten weiter.

Woher die Rollen kommen

Die Rollen einer Person stehen in ihrem Token. CIAS liest sie bei jeder Anfrage aus und bildet daraus die effektiven Rollen: Gehört eine Person mehreren Mandanten an und hat die Organisation eigene Rollen, gelten die Rollen des aktiven Mandanten. CDMS prüft nur gegen diese effektiven Rollen. Siehe Effektive Rollen: global oder im Mandanten.

Abstrakte Modelle

Ein abstraktes Modell leitet jede Anfrage an seinen Untertyp weiter. Geprüft werden dann die Rollen des Untertyps:

  • Anlegen, Lesen, Ändern, Löschen über /crm/kunde/… verlangen die Rollen von privatkunde oder firmenkunde, je nachdem, welcher Typ betroffen ist.
  • Eine Suche über das abstrakte Modell liest jeden Treffer über seinen Untertyp. Die Person braucht die Leserolle jedes Untertyps, der in den Treffern vorkommt.
  • Die Rollen des abstrakten Modells selbst gelten, wenn ein anderes Modell über eine Beziehung auf das abstrakte Modell zeigt.

Siehe Abstrakte Modelle.

Fallen

Wie es weitergeht

Quellen im Code und in der Wissensdatenbank
  • CDMS/cdms-authorization – AbstractAuthorizationLayer (accessGrantedByRole, classAccess, *AccessAllowedByClass)
  • CDMS/cdms-generator – CdmsModelContext (deriveRole, roleFor), CdmsYamlLoader (parseModelRoles, Endpunkte: roleRequired, publicAccess), DtoMetaProcessor
  • CDMS/cdms-system-layer – AbstractLayer (recursivePrepare, recursiveRead, recursiveQuery, recursiveDelete, queryHistory, downloadFile), AbstractSystemLayer (historyRollback)
  • CDMS/cdms-rest-api – AbstractHubApi
  • CIAS/cias-authentication – TokenParser, EffectiveRoles
  • CDMS/cdms-generator – ModelRoleRestrictionTest; CDMS/cdms-integrationtest – AbstractRoleDenialTest
  • hub-backend/structure/enumerations.yaml (ROLE_TYPE)
Suchen