Worum es geht
Drei Wörter tauchen immer wieder auf, wenn es um die Struktur von Kunden geht: Mandant, Organisation und Gruppe. Sie klingen nach drei Dingen. In CIAS sind es aber nur zwei:
- Der Mandant trennt Daten. Was in Mandant A liegt, sieht niemand aus Mandant B.
- Die Gruppe bündelt Rollen. Wer Mitglied ist, bekommt alle Rollen der Gruppe.
- Die Organisation ist kein eigenes Ding. Sie ist Keycloaks Name für einen dynamischen Mandanten.
Die eine Frage, die entscheidet
Wenn jemand „wir brauchen eine Organisation für X“ sagt, hilft eine einzige Frage:
flowchart TB
Q{"Sollen diese Personen die Daten<br/>der anderen nicht sehen können?"}
Q -- "ja" --> T["Eigener Mandant<br/>Daten getrennt"]
Q -- "nein" --> Q2{"Sollen sie gemeinsam<br/>dieselben Rollen bekommen?"}
Q2 -- "ja" --> G["Gruppe<br/>ein Bündel Rollen"]
Q2 -- "nein" --> N["einzelne<br/>Rollenvergaben"]
Nur die Antwort „ja“ auf die erste Frage kostet einen Mandanten. Ein Mandant ist schwer: Er bekommt eigene Daten, oft eine eigene Datenbank, und jede Anfrage läuft unter genau einem Mandanten. Eine Gruppe ist leicht: Sie ist nur eine Liste von Rollen und Mitgliedern.
Die drei Begriffe nebeneinander
| Mandant | Organisation | Gruppe | |
|---|---|---|---|
| Aufgabe | trennt Daten | keine eigene | bündelt Rollen |
| Wer führt ihn? | CIAS | niemand, sie folgt dem Mandanten | CIAS |
| Datensatz in CIAS | ja, mit Schlüssel, Art, Status | nein, nur die ID als Verweis am Mandanten | ja, mit Rollen und Mitgliedern |
| In Keycloak | dynamisch: Organisation. Statisch: nichts | Organisation | Gruppe im Realm |
| Wirkt im Token als | aktiver Mandant der Anfrage | Organisations-Claim mit Mitgliedschaft und Rollen | die Rollen, die sie enthält |
| Eltern und Kinder | nein | nein | nein |
Der Mandant
Ein Mandant ist eine Kundeneinheit mit eigenen, abgetrennten Daten. CIAS führt ihn als eigenen Datensatz und ist das einzige System, das Mandanten anlegt. Es gibt zwei Arten:
| Art | Wie Keycloak ihn kennt | Wie eine Person ihm zugeordnet wird |
|---|---|---|
DYNAMIC | als Organisation | Mitgliedschaft in der Organisation |
STATIC | gar nicht | über das Attribut tenant (und allowedTenants) am Konto |
Die Art steht am Mandanten, nicht an der Installation. Mehr unter Statische und dynamische Mandanten.
Die Organisation
Keycloak hat eine eigene Funktion „Organizations“. CIAS nutzt sie, um einen dynamischen Mandanten in Keycloak abzubilden. Das heißt:
- Eine Organisation entsteht, wenn eine Firma sich selbst registriert: CIAS legt dann die Organisation und den dynamischen Mandanten zusammen an. Wird ein dynamischer Mandant über die Verwaltungs-API angelegt, nennt der Aufruf eine Organisation, die es schon gibt. Einen eigenen Lebenslauf hat sie nicht, sie folgt dem Mandanten.
- Es gibt in CIAS keine Organisationsverwaltung, keine eigene Tabelle und keinen eigenen Endpunkt für Organisationen.
- In CIAS-Oberflächen und -APIs heißt es immer Mandant. Das Wort „Organisation“ begegnet dir nur in der Keycloak-Konsole, im Adapter und im Token, dort als Claim
organization.
Die Gruppe
Eine Gruppe ist ein Bündel von Rollen. Statt jeder neuen Kollegin im Support zehn Rollen einzeln zu geben, legst du einmal die Gruppe support an und machst die Kollegin zum Mitglied.
- Eine Gruppe darf Rollen mehrerer Module zugleich tragen, etwa CDMS- und CRMS-Rollen.
- Eine Gruppe gilt plattformweit. Sie ist keinem Mandanten zugeordnet.
- Eine Gruppe kann Standardgruppe sein: Jedes neue Konto tritt ihr bei.
- Mitglied sein heißt: Du bekommst die Rollen. Es heißt nicht, dass du die Daten anderer Mitglieder siehst.
Mehr unter Was eine Gruppe ist. Wie Client-Rollen aus einer Gruppe unter einem dynamischen Mandanten wirken, steht unter Gruppenrollen unter dynamischen Mandanten.
Keine Eltern und Kinder
Ein Mandant hat keinen übergeordneten Mandanten, und eine Organisation hat keine Unter-Organisation. Das ist Absicht. Ein Mandant ist eine Trennlinie. Hätte er Kinder, müsste für jede dieser drei Fragen eine Antwort feststehen:
- Wenn der Eltern-Mandant gesperrt ist, sind dann auch die Kinder gesperrt?
- Gelten die Rollen aus dem Eltern-Mandanten auch in den Kindern?
- Sieht der Eltern-Mandant die Daten der Kinder?
Jede Antwort wäre eine Sicherheitsentscheidung. Deshalb gibt es keine Mandanten-Hierarchie. Jeder Mandant steht für sich.
| Sollen die Töchter die Daten der anderen sehen? | Gemeinsame Rollen? | Lösung in CIAS |
|---|---|---|
| nein | – | je Tochter ein eigener Mandant |
| ja | ja | ein Mandant, dazu Gruppen für die gemeinsamen Rollenbündel |
| ja | nein | ein Mandant, Rollen einzeln vergeben |
Szenario: zwei Firmen, eine Anwendung
Zwei Kunden nutzen dieselbe Anwendung: die Nordbau GmbH und die Südlogistik AG. Beide dürfen die Daten der anderen nicht sehen.
-
1Admin→Keycloaklegt die Organisationen
nordbauundsuedlogistikan und macht Anna bzw. Ben zu Mitgliedern -
2Admin→CIASlegt den Mandanten
nordbauan, ArtDYNAMIC, mit der ID der Organisationnordbau -
3Admin→CIASlegt den Mandanten
suedlogistikan, ArtDYNAMIC, mit der ID der Organisationsuedlogistik -
4Admin→CIASlegt die Gruppe
sachbearbeitungan, mit den Rollencustomer-readundorder-edit -
5CIAS→Keycloaklegt die Gruppe im Realm an, markiert mit
cias-managed=true -
6Admin→CIASmacht Anna (Nordbau) und Ben (Südlogistik) zu Mitgliedern der GruppeErgebnis: Beide haben dieselben Rollen, jeder aber nur in den Daten des eigenen Mandanten
Was jetzt gilt:
| Anna | Ben | |
|---|---|---|
| Mandant | nordbau | suedlogistik |
| Rollen aus der Gruppe | customer-read, order-edit | customer-read, order-edit |
| sieht Kunden von Nordbau | ja | nein |
| sieht Kunden von Südlogistik | nein | ja |
Die Gruppe hat Anna und Ben dieselben Rechte gegeben. Der Mandant sorgt dafür, dass sie diese Rechte auf verschiedenen Daten ausüben. Die gemeinsame Gruppe verbindet die beiden nicht.