CodamAIDocs
Themafertig

Was eine Gruppe ist

Ein Bündel aus Realm- und Client-Rollen mit Mitgliedern, geführt von CIAS, in Keycloak als markierte Kopie.

Ausprägungen
Realm-Rollen in der GruppeClient-Rollen mehrerer Module in der GruppeGruppe ohne RollenStandardgruppe

Worum es geht

Stell dir vor, jede neue Kollegin im Support braucht dieselben zehn Rollen, verteilt auf CDMS, CRMS und den Realm. Du könntest jede Rolle einzeln vergeben, bei jeder Person, und beim Ausscheiden jede einzeln wieder entziehen. Oder du legst einmal die Gruppe support an, gibst ihr die zehn Rollen und machst die Kollegin zum Mitglied.

Eine Gruppe ist also ein Bündel von Rollen mit Mitgliedern. Wer Mitglied ist, bekommt alle Rollen der Gruppe. Wer die Gruppe verlässt, verliert sie wieder.

Das Bild

flowchart LR
    subgraph C["CIAS (führt die Gruppe)"]
      direction TB
      G["Gruppe support<br/>Name, Beschreibung<br/>Standardgruppe: nein"]
      R["Rollen<br/>realm: user<br/>cdms-backend: customer-read, order-edit<br/>crms-backend: ticket-edit"]
      M["Mitglieder<br/>Anna, Ben, Chris …"]
      G --> R
      G --> M
    end
    subgraph K["Keycloak (hält die Kopie)"]
      KG["Gruppe support im Realm<br/>cias-managed = true<br/>Rollenzuordnungen, Mitglieder"]
    end
    C -- "schreibt die Kopie" --> K
    K -- "Rollen der Gruppe" --> T["Token jedes Mitglieds"]

Lies es so: Eine Gruppe bündelt Rollen und hat Mitglieder. CIAS schreibt beides nach Keycloak. Keycloak legt die Rollen der Gruppe ins Token jedes Mitglieds, genau so, als hätte die Person sie einzeln bekommen.

Was zu einer Gruppe gehört

TeilBedeutung
keyder Schlüssel, zum Beispiel support. Er ändert sich nie. In Keycloak heißt die Gruppe genau so. Höchstens 128 Zeichen
namewas Menschen lesen, zum Beispiel „Support 1st Level“. Fehlt er, nimmt CIAS den Schlüssel. Nur in CIAS, Keycloak zeigt den Schlüssel
descriptionwofür die Gruppe da ist. In Keycloak steht sie im Attribut description
rolesdie Rollen, die die Gruppe vergibt: Realm-Rollen und Client-Rollen beliebig vieler Module, jede muss im Rollenkatalog stehen
Mitgliederdie Personen, über die ID ihres Benutzerdatensatzes in CIAS
defaultGroupob jedes neue Konto automatisch Mitglied wird, siehe Die Standardgruppe
syncStateob die Kopie in Keycloak zum Stand in CIAS passt: SYNCHRONIZED oder PENDING, siehe Abgleich mit Keycloak

Eine Rolle heißt in einer Gruppe immer Client plus Schlüssel, denn derselbe Schlüssel kann auf zwei Clients zwei verschiedene Rechte sein. Ein leerer Client bedeutet: Realm-Rolle. Mehr dazu unter Realm-Rolle, Client-Rolle, Organisationsrolle.

Die Ausprägungen

Was eine Gruppe tragen kann

Wann: Die Gruppe trägt Rollen ohne Client, etwa user oder allowed-tenant-context-switch.

Realm-Rollen landen im Token unter realm_access.roles. Sie gelten in jedem Mandanten, egal welcher Art.

Ergebnis: wirkt überall

Wann: Die Gruppe trägt cdms-backend: customer-read und crms-backend: ticket-edit.

Genau dafür gibt es Gruppen: Eine Aufgabe im Unternehmen hält sich nicht an Modulgrenzen. Eine Kompositrolle könnte das nicht, sie lebt immer auf einem Client oder im Realm. Client-Rollen aus einer Gruppe landen unter resource_access.<client>.roles.

Ergebnis: wirkt, solange der Mandant der Anfrage keine eigenen Rollen trägt, siehe Gruppenrollen unter dynamischen Mandanten

Wann: Die Gruppe wird angelegt, die Rollen kommen später.

Das ist erlaubt. Eine Gruppe ohne Rollen gibt niemandem etwas, auch wenn sie schon Mitglieder hat.

Ergebnis: gültig, vergibt nichts

Wann: defaultGroup ist true.

Jedes Konto, das ab jetzt entsteht, wird Mitglied. Wer schon ein Konto hat, bleibt, wie er ist.

Ergebnis: siehe Die Standardgruppe

Plattformweit und flach

Eine Gruppe hat keinen Mandanten. Sie gilt auf der ganzen Plattform. Anna aus nordbau und Ben aus suedlogistik können in derselben Gruppe sein. Beide bekommen dieselben Rollen, üben sie aber nur auf den Daten ihres eigenen Mandanten aus. Die Gruppe verbindet die beiden nicht. Siehe Mandant, Organisation, Gruppe.

Eine Gruppe hat auch keine Untergruppen. Jede Gruppe steht für sich, und eine Person kann in mehreren Gruppen sein. Hat sie eine Rolle über zwei Wege, hat sie sie einfach, nicht doppelt.

Gruppe, Einzelvergabe, Vergabe im Mandanten

Gruppe
Bündel mit Mitgliedern
  • viele Rollen auf einmal, über Module hinweg
  • gilt global, ohne Mandant
  • kein Enddatum, kein Grund je Person
  • verwaltet nur der Plattform-Administrator
  • Wer die Gruppe verlässt, verliert alle ihre Rollen
Einzelvergabe global
eine Rolle, eine Person
  • eine Rolle mit Scope PLATFORM
  • mit Enddatum und Grund
  • als Vergabe in CIAS sichtbar
  • verwaltet der Plattform-Administrator
Vergabe im Mandanten
eine Rolle in einem Mandanten
  • eine Rolle mit Scope TENANT
  • gilt nur in diesem Mandanten
  • mit Enddatum und Grund
  • darf auch ein Mandanten-Administrator mit Delegation

Die Einzelvergaben stehen unter Eine Rolle vergeben.

Gruppe oder Einzelvergabe?
Mehrere Personen brauchen dasselbe Rollenbündel?Soll es nur in einem Mandanten gelten?Braucht es ein Enddatum je Person?Nimm
–ja–Vergabe im Mandanten, keine Gruppe
–neinjaEinzelvergabe mit validUntil
janeinneinGruppe
neinneinneinEinzelvergabe, eine Gruppe lohnt sich nicht

Zwei Systeme, eine feste Reihenfolge

Jede Änderung an einer Gruppe schreibt zweimal: in die CIAS-Datenbank und nach Keycloak. Eine gemeinsame Transaktion gibt es nicht. Deshalb gilt eine feste Regel:

Was geschiehtReihenfolgeBricht es dazwischen ab …
etwas geben: Gruppe anlegen, Rolle dazu, Mitglied aufnehmenerst CIAS, dann Keycloak… steht es in CIAS, im Token noch nicht. Die Gruppe ist PENDING
etwas nehmen: Rolle weg, Mitglied entfernen, Gruppe löschenerst Keycloak, dann CIAS… ist das Recht schon weg, der Datensatz steht noch

So bleibt nach einer Unterbrechung immer weniger Recht übrig, nie mehr. Wie ein liegengebliebenes PENDING wieder aufgeholt wird, steht unter Abgleich mit Keycloak.

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-authorization – Group, RoleRef, GroupSyncState, GroupView, GroupRoleView, GroupService
  • CIAS/cias-authorization – db/migration V4__cias_group.sql, V5__cias_group_default.sql
  • CIAS/cias-iam-api – GroupManagementPort; CIAS/cias-iam-keycloak – KeycloakGroupAdapter (Attribute cias-managed, description)
  • CIAS/cias-authorization/docs/adr – ADR-017, ADR-031, ADR-034
Suchen