Worum es geht
Jede Registrierung muss wissen, in welchem Mandanten die Person landet: in einem neuen, in einem bestehenden oder in gar keinem. Das legt die Mandantenzuordnung fest, eingestellt je Ablauf als tenant-assignment.
Die sechs Arten
| Zuordnung | Bedeutung | Woher der Schlüssel kommt | Erlaubt für |
|---|---|---|---|
NONE | kein Mandant | – | alle Abläufe |
CREATE_NEW | neuer Mandant, die Person gründet ihn | aus dem Payload, einem Hook oder abgeleitet aus company | alle Abläufe |
JOIN_EXISTING | Beitritt zu einem bestehenden Mandanten | aus dem Payload oder einem Hook, Pflicht | alle Abläufe |
FROM_CALLER | Mandant der aufrufenden Person | aus deren Token | nicht SELF_SERVICE, denn dort gibt es keinen Aufrufer |
FROM_PAYLOAD | Mandant, den der Aufrufer nennt | aus dem Feld tenantKey | nur PLATFORM_ADMIN |
FROM_INVITATION | Mandant, der beim Einladen genannt wird | aus der Anfrage, Pflicht | alle Abläufe |
Die Regeln in der letzten Spalte sind fest eingebaut: Stellt eine Konfiguration etwa FROM_PAYLOAD für SELF_SERVICE ein, lehnt CIAS Registrierungen in diesem Ablauf ab.
Die ausgelieferten Einstellungen
| Ablauf | Zuordnung in cias-runtime | Wirkung |
|---|---|---|
SELF_SERVICE | CREATE_NEW | jede Selbstregistrierung gründet einen Mandanten |
TENANT_ADMIN | FROM_CALLER | Einladung in den eigenen Mandanten |
PLATFORM_ADMIN | nicht konfiguriert | siehe Anlage durch den Plattform-Administrator |
Der Entscheidungsweg
-
CIASPolicy
tenant-assignmentdes Ablaufs, dazu ein Schlüssel aus Token oder Payload -
CIASFROM_CALLER?Dann steht der Mandant fest. Hooks werden gar nicht gefragt
-
HookHooks
onResolveTenantdarf die Entscheidung ersetzen, der Reihe nach -
CIASSchlüssel ableiten
CREATE_NEWohne Schlüssel? Dann auscompanyableiten - Mandant steht fest und wird am Vorgang gespeichert
Diese Entscheidung fällt beim Absenden der Registrierung. Ob es den Mandanten gibt, prüft CIAS bei der Bereitstellung. Siehe Was beim Abschluss passiert.
Jede Art im Einzelnen
Wann: Eine Installation ohne Mandanten oder ein Ablauf für Personen ohne Firma.
Die Person bekommt keinen Mandanten. Ein tenantKey im Payload wird ignoriert. Die Rollen kommen aus der Situation TENANTLESS.
Wann: Selbstregistrierung einer Firma.
Der Schlüssel wird aus dem Feld company abgeleitet, wenn weder Payload noch Hook einen nennen: Akzente weg, klein, andere Zeichen zu -, höchstens 48 Zeichen. Fehlt company, dient die Domain der Adresse als Quelle, etwa muster-bau aus anna@muster-bau.de. Ist der Schlüssel vergeben, hängt CIAS -2 bis -20 an. Bei der Bereitstellung entstehen Organisation und Mandant; die Person ist Gründerin (TENANT_FOUNDER).
Wann: Ein Hook oder Aufrufer weiß, zu welchem bestehenden Mandanten die Person gehört.
Ohne Schlüssel ist diese Zuordnung ungültig. Die Person wird Mitglied (TENANT_MEMBER).
Wann: Einladung durch eine Mandanten-Administratorin.
Der Mandant kommt aus ihrem Token. Ein tenantKey im Payload wird verworfen, Hooks werden nicht gefragt. Hat der Aufrufer keinen Mandanten: 403.
Wann: Anlage durch den Plattform-Administrator.
Der Mandant kommt aus dem Feld tenantKey. Fehlt es: 400.
Wann: Die Anfrage nennt den Mandanten, in den eingeladen wird.
Wie bei JOIN_EXISTING wird die Person Mitglied im genannten Mandanten. Ohne Schlüssel ist die Zuordnung ungültig.
Wann: Ein Projekt hat eigene Regeln, etwa: Adressen mit @nordbau.example gehören immer zu nordbau.
Ein Hook mit onResolveTenant bekommt die Entscheidung der Policy und gibt eine neue zurück oder null für „unverändert“. Den Grund speichert CIAS am Vorgang. Bei FROM_CALLER wird der Hook nicht aufgerufen.
Ergebnis: Siehe Eigene Logik: Hooks und Events.