CodamAIDocs
Themafertig

Die wichtigsten Begriffe in Bildern

Token, Mandant, Benutzer, Rolle, Gruppe, Attribut, Modell, Hook, Revision: jeder Begriff mit einem Satz und einem Bild.

Ausprägungen
TokenMandantBenutzerRolle (im Token und effektiv)GruppeAttribut (pro Person und pro Mandant)ModellHookRevision

Worum es geht

Auf dieser Lernseite kommen immer wieder dieselben neun Wörter vor. Hier steht jedes mit einem Satz und einem kleinen Bild. Die Einzelheiten stehen jeweils auf der Seite, auf die der Abschnitt verweist.

Die Landkarte

So hängen die neun Begriffe zusammen:

flowchart LR
    U["Benutzer"] -- "gehört zu" --> M["Mandant"]
    U -- "Mitglied in" --> G["Gruppe"]
    G -- "bündelt" --> R["Rolle"]
    U -- "hat" --> R
    U -- "hat Werte für" --> A["Attribut"]
    M --> T(["Token"])
    R --> T
    A --> T
    T -- "bei jeder Anfrage" --> D["CDMS"]
    D -- "Rolle erlaubt Operation auf" --> Mo["Modell"]
    Mo -- "ruft auf" --> H["Hook"]
    Mo -- "hält fest" --> Rv["Revision"]

Die linke Hälfte gehört zu CIAS und Keycloak: Wer ist die Person, wo gehört sie hin, was darf sie? Die rechte Hälfte gehört zu CDMS: Welche Daten gibt es, und was passiert mit ihnen? Das Token ist die Brücke dazwischen.

Token

Ein Token ist ein signierter Ausweis, den Keycloak nach der Anmeldung ausstellt und den der Client bei jeder Anfrage mitschickt.

flowchart LR
    K["Keycloak<br/>stellt aus, signiert"] --> T(["Token<br/>wer, Mandant,<br/>Rollen, Attribute"])
    T --> F["Filterkette<br/>prüft, liest aus"]
    F --> RC["RequestContext<br/>gilt für eine Anfrage"]

Die Filterkette von CIAS prüft Signatur und Ablauf selbst, ohne Keycloak zu fragen. Dann legt sie das Ergebnis in den RequestContext, und CDMS liest nur noch dort. Was im Token steht, gilt bis zu seinem Ablauf. Ein entzogenes Recht verschwindet deshalb erst mit dem nächsten Token.

Mehr: Was bei jeder Anfrage mit dem Token passiert, Was aus dem Token gelesen wird, Warum ein Rechteentzug verzögert wirkt

Mandant

Ein Mandant ist ein Kunde, dessen Daten von den Daten aller anderen Kunden getrennt bleiben.

flowchart LR
    A(["Anfrage im<br/>Mandanten nordbau"]) --> DA[("Datenbank<br/>nordbau")]
    A -. "nie" .-> DB[("Datenbank<br/>suedlogistik")]

CIAS führt die Mandanten. Welcher Mandant für eine Anfrage gilt, kommt aus dem Token: bei einem dynamischen Mandanten aus der Organisation in Keycloak, bei einem statischen aus dem Attribut tenant. Danach fragt das Mandanten-Tor CIAS, ob dieser Mandant gerade bedient wird. In der Betriebsart MULTI hat jeder Mandant eine eigene Datenbank. In SINGLE gibt es keine Mandanten.

Mehr: Mandant, Organisation, Gruppe, Den Mandanten zulassen (Mandanten-Tor), SINGLE und MULTI

Benutzer

Ein Benutzer ist eine Person, die in Keycloak ein Konto zum Anmelden und in CIAS einen Datensatz mit ihrer fachlichen Bedeutung hat.

flowchart LR
    C["CIAS-Datensatz<br/>Status, Heimatmandant"] -- "verweist auf" --> K["Keycloak-Konto<br/>Passwort, MFA"]
    K -- "ID als sub<br/>im Token" --> D["CDMS<br/>_userId, Historie"]

Beide Hälften hängen an der ID des Kontos in Keycloak. Im Token steht sie als sub. CDMS kennt nur diese ID und den Namen aus dem Token. Es trägt die ID etwa in _userId ein und in die Historie.

Mehr: Der Benutzerdatensatz, Der Lebenslauf eines Benutzers

Rolle

Eine Rolle ist ein benanntes Recht wie hr-employee-read, das im Token steht und das CDMS mit den Rollen eines Modells vergleicht.

flowchart LR
    M["Modul<br/>meldet an"] --> C["CIAS<br/>Katalog, Vergabe"]
    C --> K["Keycloak"]
    K --> T(["Token"])
    T --> D["CDMS<br/>Modellrolle prüfen"]

Ein Modul meldet seine Rollen an, CIAS führt sie im Rollenkatalog, vergibt sie und schreibt sie nach Keycloak. CDMS prüft nicht einfach die Rollen im Token, sondern die effektiven Rollen, die die Filterkette daraus bildet: Hat die Person in ihrem aktiven, dynamischen Mandanten eigene Rollen, ersetzen diese die global vergebenen Client-Rollen. Realm-Rollen gelten immer.

Mehr: Der Rollenkatalog, Effektive Rollen: global oder im Mandanten, Modellrollen, Wie eine Rolle aus dem Code ins Token kommt

Gruppe

Eine Gruppe ist ein Bündel von Rollen, und wer Mitglied ist, bekommt alle Rollen der Gruppe.

flowchart LR
    A["Anna"] -- "Mitglied" --> G["Gruppe<br/>support"]
    B["Ben"] -- "Mitglied" --> G
    G --> R1["customer-read"]
    G --> R2["order-edit"]

Eine Gruppe gilt plattformweit und gehört zu keinem Mandanten. Mitglied sein heißt: dieselben Rollen. Es heißt nicht, dass du die Daten der anderen Mitglieder siehst. CIAS führt die Gruppe, Keycloak hält eine Kopie, damit die Rollen ins Token kommen.

Mehr: Was eine Gruppe ist, Gruppenrollen unter dynamischen Mandanten

Attribut

Ein Attribut ist ein benannter Wert an einer Person, etwa projects = alpha, beta, mit dem CDMS die sichtbaren Zeilen einschränkt.

flowchart LR
    V(["projects =<br/>alpha, beta"]) --> F["Attributfilter<br/>in CDMS"]
    F --> W["nur Zeilen mit<br/>project IN (alpha, beta)"]

Ein Attribut gilt entweder pro Person (USER): Dann kommt der Wert über das Token. Oder es gilt pro Person und Mandant (USER_IN_TENANT): Dann holt CIAS bei jeder Anfrage den Wert für den aktiven Mandanten und ersetzt damit den Wert aus dem Token. Im Attributfilter hebt ein * die Einschränkung auf, ein fehlendes Attribut lässt die Anfrage scheitern.

Mehr: Zwei Herkünfte von Attributen, Ein Wert pro Person oder pro Mandant, Attributfilter

Modell

Ein Modell beschreibt ein Ding deiner Fachlichkeit, etwa Customer, mit Feldern, Beziehungen, Endpunkten, Rollen und Filtern.

flowchart LR
    H["Hub<br/>Modell Customer"] --> B["Build<br/>Generator"]
    B --> A["Tabelle, Endpunkte,<br/>Rollen, Filter"]

Du beschreibst das Modell im Hub, der Build erzeugt daraus den Code. Die Ebene des Modells (System, Mandant oder Benutzer) legt fest, in welcher Datenbank seine Daten liegen und wer welche Zeilen sieht.

Mehr: Modellieren im Hub, Modell-Ebenen: System, Mandant, Benutzer, Welche Endpunkte ein Modell hat

Hook

Ein Hook ist eine Klasse in deinem Projekt, die CDMS an festen Stellen eines Standardablaufs aufruft, damit du eigene Fachlogik einhängen kannst.

flowchart LR
    A(["PATCH"]) --> BH["before-Hook<br/>darf noch ändern"]
    BH --> DB[("Datenbank")]
    DB --> AH["after-Hook"]
    AH --> R(["Antwort"])

Ein Hook gehört zu einem Modell. Er läuft vor der Datenbankänderung (before) oder danach (after), beim Lesen nur danach. Beide laufen in der Transaktion der Anfrage. Auch die Registrierung in CIAS hat eigene Hooks, mit denen ein Projekt den Ablauf anpasst.

Mehr: Hooks: Arten und Zeitpunkte, Die Reihenfolge in einem Schreibvorgang, Eigene Logik: Hooks und Events

Revision

Eine Revision ist ein gespeicherter Stand eines Objekts nach einer Änderung, mit Nummer, Zeitpunkt und handelnder Person.

flowchart LR
    R1["17 · ADD"] --> R2["42 · MOD"]
    R2 --> R3["58 · MOD<br/>Rollback auf 17"]
    R3 --> R4["63 · DEL"]

Revisionen gibt es nur bei auditierten Modellen. Alle Revisionen eines Objekts zusammen sind seine Historie. Ein Rollback schreibt den alten Stand als neue Revision, die Historie wird nie umgeschrieben. Die Nummern zählen je Datenbank, also je Mandant.

Mehr: Was auditiert wird, Was eine Revision festhält, Auf einen alten Stand zurücksetzen

Alle Begriffe in einer Tabelle

BegriffIn einem SatzGeführt vonWeiter
Tokensignierter Ausweis für jede AnfrageKeycloak stellt aus, die Filterkette von CIAS liestToken-Prüfung
MandantKunde mit getrennten DatenCIASMandant, Organisation, Gruppe
BenutzerPerson mit Konto und DatensatzKeycloak (Anmeldung), CIAS (fachlich)Der Benutzerdatensatz
Rollebenanntes Recht im TokenModul meldet an, CIAS vergibt, CDMS prüftDer Rollenkatalog
GruppeBündel von Rollen mit MitgliedernCIASWas eine Gruppe ist
AttributWert an einer Person, schränkt Zeilen einCIAS schreibt, CDMS filtertAttributfilter
ModellDing deiner FachlichkeitHub, daraus der generierte CodeModellieren im Hub
Hookeigene Fachlogik im Ablaufdein ProjektHooks
Revisiongespeicherter Stand nach einer ÄnderungCDMSWas auditiert wird

Fallen

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-authentication – JwtSessionFilter, TokenParser, EffectiveRoles, EffectiveAttributes, TenantGate, KeycloakOrganizationClaimReader, CiasTokenProperties
  • commons – session/RequestContextHolder, interfaces/HookServiceInterface, models/AttributeBinding
  • CIAS/cias-user – Benutzerdatensatz (externalUserId, status, homeTenantKey)
  • CIAS/cias-authorization – RoleAssignmentService, Gruppen
  • CDMS/cdms-authorization – AbstractAuthorizationLayer (effectiveUserRoles), AbstractAttributeFilter (effectiveUserAttributes)
  • CDMS/cdms-system-layer – HookManagementSystem, AbstractSystemLayer (historyRollback)
  • CDMS/cdms-persistence-database – auditing/AuditRevisionEntity
  • Fertige Seiten in cias/ und cdms/, auf die jeder Abschnitt verweist
Suchen