CodamAIDocs
Themafertig

Gruppenrollen unter dynamischen Mandanten

Warum global vergebene Client-Rollen, auch aus Gruppen, unter einem dynamischen Mandanten mit eigenen Rollen nicht gelten, und wie man Gruppen deshalb plant.

Ausprägungen
Mandant ohne eigene RollenMandant mit eigenen RollenRealm-Rollen aus Gruppen

Worum es geht

Eine Gruppe gilt plattformweit. Ihre Rollen landen deshalb im Token an der globalen Stelle:

  • Realm-Rollen unter realm_access.roles,
  • Client-Rollen unter resource_access.<client>.roles.

Läuft eine Anfrage in einem dynamischen Mandanten, und hat die Person dort eigene Rollen, ersetzt CIAS die globalen Client-Rollen durch die Rollen im Mandanten. Das steht ausführlich unter Effektive Rollen: global oder im Mandanten. Für Gruppen heißt das:

Warum ist das so? Eine Gruppenrolle hat niemand für diesen einen Mandanten vergeben. Würde sie mitgelten, sickerte ein Recht in einen Mandanten, der selbst bestimmt, welche Fachrollen in ihm gelten. CIAS behebt das nicht, sondern zeigt es an: Jede Rolle einer Gruppe trägt das Feld effectiveInEveryTenant.

Vorher und nachher

Anna ist Mitglied der Gruppe support. In ihrem dynamischen Mandanten nordbau hat sie zusätzlich eine eigene Rolle hr-employee-edit.

flowchart LR
    subgraph T["Im Token von Anna"]
      direction TB
      G["global, aus der Gruppe support:<br/>cdms-backend: customer-read<br/>crms-backend: ticket-edit"]
      R["Realm, aus der Gruppe support:<br/>user"]
      O["im Mandanten nordbau:<br/>cdms-backend: hr-employee-edit"]
    end
    subgraph E["Effektiv in nordbau, im CDMS-Deployment"]
      direction TB
      E1["Fachrollen:<br/>hr-employee-edit"]
      E2["Realm-Rollen:<br/>user"]
    end
    O --> E1
    R --> E2
    G -. "fallen weg" .-> E

customer-read aus der Gruppe fällt weg, weil Anna in nordbau eigene Rollen hat. Die Realm-Rolle user aus derselben Gruppe bleibt.

Die drei Ausprägungen

Was von einer Gruppe ankommt

Wann: Statischer Mandant, oder dynamischer Mandant, in dem die Person keine Rollen hat.

Es gelten die globalen Client-Rollen, also auch alle aus Gruppen. Eine Installation, deren Mandanten alle statisch sind, merkt von dieser Grenze nichts.

Ergebnis: alle Rollen der Gruppe gelten

Wann: Dynamischer Mandant, und die Person hat dort mindestens eine Rolle, egal für welchen Client.

Die Rollen im Mandanten ersetzen die globalen Client-Rollen. Client-Rollen aus Gruppen sind für diese Anfrage nicht da.

Ergebnis: nur die Realm-Rollen der Gruppe gelten

Wann: immer

Realm-Rollen stehen unter realm_access.roles und werden nie ersetzt. In der Gruppenansicht steht bei ihnen effectiveInEveryTenant: true.

Ergebnis: gelten in jedem Mandanten

Die Entscheidung

Gilt eine Rolle aus einer Gruppe in dieser Anfrage?
Ebene der RolleMandant der Anfrage dynamisch?Person hat dort eigene Rollen?Ergebnis
Realm-Rolle––gilt
Client-Rollenein–gilt
Client-Rollejaneingilt
Client-Rollejajagilt nicht, obwohl sie im Token steht

Das Feld effectiveInEveryTenant

Jede Rolle in der Antwort von GET /cias/admin/groups/{key} trägt das Feld:

RolleeffectiveInEveryTenantWas die Oberfläche zeigen sollte
Realm-Rolletruenichts Besonderes
Client-Rollefalseeinen Hinweis: „gilt nicht in Mandanten mit eigenen Rollen“

Das Feld sagt, wie der Mechanismus ist, nicht, was deine Installation gerade damit macht. Auch wenn alle deine Mandanten statisch sind, steht bei Client-Rollen false.

Der Scope einer Rolle im Katalog ändert daran nichts. Eine Gruppe darf auch Rollen mit Scope TENANT tragen, sie vergibt sie trotzdem global, ohne Mandant. Eine Rolle nur für einen Mandanten vergibst du mit einer Vergabe im Mandanten, nicht über eine Gruppe.

Gruppen planen

Wohin gehört diese Rolle?
Braucht jede Person sie in jedem Mandanten?Gibt es dynamische Mandanten mit eigenen Rollen?Plan
ja–als Realm-Rolle in eine Gruppe
neinneinals Client-Rolle in eine Gruppe
neinjaals Vergabe im Mandanten, je Person und Mandant

Kurz: In Installationen mit dynamischen Mandanten sind Gruppen gut für Realm-Rollen und für Personen ohne eigene Rollen im Mandanten. Fachrollen, die in einem Mandanten gelten sollen, der schon eigene Rollen führt, gehören in den Mandanten.

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-authentication – EffectiveRoles.resolve, KeycloakOrganizationClaimReader
  • CIAS/cias-authorization – Group (Klassenkommentar), GroupRoleView.effectiveInEveryTenant, AuthorizationRestDtos.GroupRoleResponse, GroupService.requireCatalogued
  • CIAS/cias-authorization – ConferralCeiling.heldBy (Gruppenrollen zählen zur Obergrenze)
  • CIAS/cias-iam-api – GroupManagementPort (Klassenkommentar)
  • CIAS/cias-authorization/docs/adr – ADR-023, ADR-031, ADR-034
Suchen