Worum es geht
Ein neuer Kunde bedeutet für die Plattform vier Dinge, die an vier verschiedenen Orten entstehen:
| Was | Wo |
|---|---|
| der Datensatz des Mandanten | in der Datenbank von CIAS |
| gegebenenfalls eine Organisation | in Keycloak |
| eine Datenbank mit ihrem Schema | dort, wo CDMS seine Daten hält |
| die Konten der Personen mit ihren Rollen | in Keycloak, dazu Benutzerdatensätze in CIAS |
Eine gemeinsame Transaktion über alle vier gibt es nicht. Deshalb hält CIAS jeden Schritt einzeln fest, damit ein halb fertiger Kunde erkennbar ist und repariert werden kann.
Der ganze Weg in einem Bild
Der Normalfall: ein Plattform-Administrator legt den Mandanten an, CDMS und CIAS laufen im selben Prozess, die Datenhaltung ist auf MULTI eingestellt.
sequenceDiagram
autonumber
participant A as Admin
participant C as CIAS
participant CDB as CIAS-Datenbank
participant P as CDMS-Persistenz
participant TDB as Mandanten-DB
participant K as Keycloak
participant U as Client von nordbau
A->>C: POST /cias/admin/tenants {key: nordbau, type: STATIC}
C->>C: Rolle des Aufrufers prüfen
C->>CDB: Transaktion 1 – Schlüssel frei? speichern als PENDING / IN_PROGRESS
CDB-->>C: gespeichert
C->>P: richte nordbau ein
P->>TDB: CREATE DATABASE nordbau
P->>TDB: Schema auf den Stand der Modelle bringen
TDB-->>P: fertig
P-->>C: eingerichtet
C->>CDB: Transaktion 2 – PROVISIONED, dann ACTIVE
C-->>A: 200 mit dem Mandanten
Note over A,K: Jetzt bekommen die Menschen Zugang
A->>C: Person anlegen oder einladen, Rollen vergeben
C->>K: Konto, Mitgliedschaft, Rollen
C->>CDB: Benutzerdatensatz
Note over U,TDB: Die erste Anfrage
U->>C: POST /api/rest/crm/customer/query + Token
C->>C: Token prüfen, Mandant auflösen
C->>C: Wird nordbau bedient?
C->>U: Antwort aus der Mandanten-DB
Drei Dinge an dieser Form sind Absicht:
- Absicht zuerst speichern. Stürzt der Prozess danach ab, ist wenigstens etwas da, das man wiedererkennt: ein Mandant in
IN_PROGRESSmit Startzeit. - Einrichten ohne offene Transaktion. Eine Datenbank anzulegen und zu migrieren kann dauern. Liefe das in einer Transaktion, hielte CIAS so lange eine Verbindung und ihre Sperren fest.
- Ergebnis danach speichern, Erfolg wie Misserfolg, jeweils in einer eigenen kurzen Transaktion.
Die Stationen bis zur ersten Anfrage
-
CIASDatensatzIst der Schlüssel frei und gültig?↳ nein abgelehnt, es wird nichts angelegt
-
CDMSEinrichtungSteht die Datenbank mit ihrem Schema?↳ nein Rollout
FAILED, der Mandant wird nicht bedient — Neuversuch möglich -
CIASStellungIst der Mandant
ACTIVEund innerhalb seines Gültigkeitsfensters?↳ nein das Tor lehnt jede Anfrage ab -
KeycloakZugangNennt das Token der Person genau diesen Mandanten?↳ nein die Filterkette lehnt ab, bevor CDMS erreicht wird
-
CIASMandanten-TorWird nordbau heute bedient?↳ nein abgelehnt, ohne zu verraten warum
- Die Anfrage erreicht CDMS und liest aus der Datenbank von nordbau
Die letzten drei Stationen laufen bei jeder Anfrage, nicht nur bei der ersten. Einzelheiten unter Die Mandantenprüfung in beiden Betriebsarten.
Die Varianten
Wann: Ein Plattform-Administrator legt ihn an, meistens weil ein Vertrag zustande gekommen ist.
-
1Admin→CIAS
POST /cias/admin/tenantsmit Schlüssel, Art und AnzeigenamenNur ein Plattform-Administrator. Ein Mandanten-Administrator darf keine Mandanten anlegen — das ist genau die Grenze, die Kunden voneinander trennt. -
2CIASlegt keine Organisation in Keycloak anBei einem dynamischen Mandanten verweist das Feld
externalOrganizationIdauf eine Organisation, die es dort schon gibt. -
3CIAS→CDMSrichtet die Datenbank ein und aktiviert den Mandanten
Ergebnis: Der Mandant ist da und leer. Menschen kommen getrennt dazu, über Anlegen oder Einladen.
Wann: Eine Firma trägt sich selbst ein, und die Zuordnung steht auf „neuen Mandanten gründen“.
-
1Benutzer→CIASfüllt das Formular aus, inklusive Firmenname
-
2CIAS→E-Mailschickt den Bestätigungslink; erst der bestätigte Klick löst irgendetwas aus
-
3CIAS→Keycloaklegt zuerst die Organisation an, ihr Kürzel ist der Mandantenschlüssel
-
4CIASlegt dann den Mandanten an, Art
DYNAMIC, mit Verweis auf die Organisation — inklusive Datenbank -
5CIAS→Keycloakmacht die Person zum Mitglied, setzt ihre Mandanten-Attribute und vergibt die Gründerrollen
Ergebnis: Mandant, Organisation und erste Person entstehen in einem Zug. Einzelheiten unter Was beim Abschluss passiert.
Wann: CDMS und CIAS laufen im selben Prozess.
Die Bitte „richte nordbau ein“ ist ein Methodenaufruf. In MULTI legt CDMS die Datenbank an und migriert das Schema, in SINGLE gibt es nichts zu tun und die Einrichtung meldet sofort Erfolg.
Ergebnis: Scheitert die Einrichtung, merkt es der Betrieb beim Anlegen und nicht der Kunde bei seiner ersten Anfrage.
Wann: CIAS ist ein eigener Dienst, ohne CDMS-Persistenz im Prozess.
CIAS hat keine Mandanten-Datenbanken und richtet deshalb nichts ein; die Einrichtung meldet sofort Erfolg, und beim Start steht einmal fest, dass diese Installation nichts bereitstellt. Die Datenbank legt der CDMS-Dienst bei der ersten Anfrage für diesen Mandanten selbst an, sofern Anlegen dort freigegeben ist.
Ergebnis: Der Mandant ist sofort aktiv, und die erste Anfrage des Kunden dauert länger. Ist Anlegen nicht freigegeben, scheitert sie.
Wo die Datenbank entsteht
| CDMS-Persistenz im selben Prozess? | Betriebsart | Was beim Anlegen passiert |
|---|---|---|
| ja | MULTI | CDMS legt Datenbank und Schema sofort an |
| ja | SINGLE | nichts — es gibt nur die eine Datenbank |
| nein | – | nichts. Der CDMS-Dienst legt sie bei der ersten Anfrage an |
Welche Datenbank ein Zugriff trifft und wann sie angelegt wird, steht unter Datenbanken, Pools, Migration und Datenbanken und Schemata.
Die Zustände unterwegs
| Stellung | Rollout | Was gerade los ist |
|---|---|---|
PENDING | IN_PROGRESS | Die Einrichtung läuft. Der Mandant wird nicht bedient |
PENDING | FAILED | Die Einrichtung ist gescheitert. Ein Neuversuch ist möglich |
ACTIVE | PROVISIONED | Normalbetrieb |
SUSPENDED | PROVISIONED | Gesperrt, die Daten bleiben |
Gelingt alles, ist der Mandant sofort aktiv; PENDING sieht man nur, solange die Einrichtung läuft oder gescheitert ist. Der ganze Lebenslauf steht unter Der Lebenslauf eines Mandanten, das Anlegen im Einzelnen unter Einen Mandanten anlegen und bereitstellen.
Stirbt der Prozess zwischen den beiden Transaktionen, bleibt der Mandant in IN_PROGRESS stehen, und der Neuversuch nimmt nur FAILED an. Dafür gibt es einen Zeitgeber, der liegengebliebene Einrichtungen nach einer Frist auf FAILED setzt. Er kommt mit dem Starter und ist dort standardmäßig aus; der eigenständige CIAS-Dienst schaltet ihn ein.
Vom Mandanten zur ersten Anfrage
Ein angelegter Mandant reicht nicht. Die Anfrage einer Person muss diesen Mandanten nennen, und woher sie das tut, hängt an der Art des Mandanten:
- Das Konto trägt die Attribute
tenantundallowedTenants - Die Mitgliedschaft ist das Attribut
- Rollen werden global vergeben
- Das Kürzel der Organisation im Token nennt den Mandanten
- Die Mitgliedschaft ist die Mitgliedschaft in der Organisation
- Rollen werden in der Organisation vergeben und stehen im Organisations-Claim
Danach ist der Weg für beide gleich: Die Filterkette löst den Mandanten auf, das Mandanten-Tor fragt CIAS, ob er bedient wird, und merkt sich die Antwort kurz. Erst dann erreicht die Anfrage CDMS. Der ganze Weg steht unter Vom Login bis zu den Daten.
Fallen
Weiter
- Einen Mandanten anlegen und bereitstellen und Der Lebenslauf eines Mandanten
- Mandant, Organisation, Gruppe und Statische und dynamische Mandanten
- Selbstregistrierung und Was beim Abschluss passiert
- Datenbanken und Schemata und Kaltstart einer Installation
- Die Mandantenprüfung in beiden Betriebsarten