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
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
| Ebene der Rolle | Mandant der Anfrage dynamisch? | Person hat dort eigene Rollen? | Ergebnis |
|---|---|---|---|
| Realm-Rolle | – | – | gilt |
| Client-Rolle | nein | – | gilt |
| Client-Rolle | ja | nein | gilt |
| Client-Rolle | ja | ja | gilt nicht, obwohl sie im Token steht |
Das Feld effectiveInEveryTenant
Jede Rolle in der Antwort von GET /cias/admin/groups/{key} trägt das Feld:
| Rolle | effectiveInEveryTenant | Was die Oberfläche zeigen sollte |
|---|---|---|
| Realm-Rolle | true | nichts Besonderes |
| Client-Rolle | false | einen 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
| Braucht jede Person sie in jedem Mandanten? | Gibt es dynamische Mandanten mit eigenen Rollen? | Plan |
|---|---|---|
| ja | – | als Realm-Rolle in eine Gruppe |
| nein | nein | als Client-Rolle in eine Gruppe |
| nein | ja | als 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.