CodamAIDocs
Themafertig

Woher der Mandant kommt

Die sechs Arten der Mandantenzuordnung und die Reihenfolge, in der Policy und Hook entscheiden.

Ausprägungen
NONECREATE_NEWJOIN_EXISTINGFROM_CALLERFROM_PAYLOADFROM_INVITATIONHook überschreibt

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

ZuordnungBedeutungWoher der Schlüssel kommtErlaubt für
NONEkein Mandant–alle Abläufe
CREATE_NEWneuer Mandant, die Person gründet ihnaus dem Payload, einem Hook oder abgeleitet aus companyalle Abläufe
JOIN_EXISTINGBeitritt zu einem bestehenden Mandantenaus dem Payload oder einem Hook, Pflichtalle Abläufe
FROM_CALLERMandant der aufrufenden Personaus deren Tokennicht SELF_SERVICE, denn dort gibt es keinen Aufrufer
FROM_PAYLOADMandant, den der Aufrufer nenntaus dem Feld tenantKeynur PLATFORM_ADMIN
FROM_INVITATIONMandant, der beim Einladen genannt wirdaus der Anfrage, Pflichtalle 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

AblaufZuordnung in cias-runtimeWirkung
SELF_SERVICECREATE_NEWjede Selbstregistrierung gründet einen Mandanten
TENANT_ADMINFROM_CALLEREinladung in den eigenen Mandanten
PLATFORM_ADMINnicht konfiguriertsiehe Anlage durch den Plattform-Administrator

Der Entscheidungsweg

Wer entscheidet über den Mandanten?
  1. CIAS
    Policy
    tenant-assignment des Ablaufs, dazu ein Schlüssel aus Token oder Payload
  2. CIAS
    FROM_CALLER?
    Dann steht der Mandant fest. Hooks werden gar nicht gefragt
  3. Hook
    Hooks
    onResolveTenant darf die Entscheidung ersetzen, der Reihe nach
  4. CIAS
    Schlüssel ableiten
    CREATE_NEW ohne Schlüssel? Dann aus company ableiten
  5. 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

Die sechs Zuordnungen

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.

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-registration – TenantAssignment, TenantDecision, RegistrationPolicy (Invarianten), RegistrationService (resolveTenant, deriveTenantKey, assignTenant)
  • CIAS/cias-registration – RegistrationHook.onResolveTenant, RegistrationServiceTest
  • CIAS/cias-runtime – application.yml (tenant-assignment je Ablauf)
  • CIAS/cias-registration/docs/adr – ADR-011
Suchen