Worum es geht
Ein Benutzerattribut ist eine benannte Angabe an einer Person, die als Claim ins Token kommt. Ein Claim ist ein Eintrag im Token, etwa "projects": ["alpha", "beta"]. CIAS liest ihn bei jeder Anfrage und legt ihn in den RequestContext. CDMS kann damit Zeilen filtern, siehe Attributfilter.
Kein Attribut entsteht einfach so. Jedes wird von einem Modul angemeldet: Das Modul sagt, welche Angaben es über eine Person braucht. Es gibt zwei Quellen:
Nicht zu verwechseln mit den CIAS-Attributen am Benutzerdatensatz. Das sind Notizen der Fachlichkeit, die nie ins Token kommen, siehe Attribute einer Person pflegen.
Das Bild
flowchart LR
subgraph P["Plattform"]
CI["CIAS meldet an:<br/>tenant<br/>allowedTenants<br/>locale"]
end
subgraph M["Dein Projekt"]
MO["Modell mit accessByAttribute<br/>auf dem Feld region"] --> GEN["Generator"]
GEN --> CD["CDMS meldet an:<br/>region"]
end
CI --> K["Attributkatalog in CIAS"]
CD --> K
K --> KC["Benutzerprofil in Keycloak<br/>und Claim-Mapper"]
KC --> T["Token"]
Beide Quellen laufen durch denselben Weg: Anmeldung, Katalog, Keycloak, Token. Wie das im Einzelnen geht, steht unter Attribute anmelden und Der Weg ins Token.
Die Plattformattribute
CIAS meldet genau drei Attribute an:
| Attribut | Art | Wofür | Wer ändert es |
|---|---|---|---|
tenant | ein Wert, optional | der statische Mandant einer Person, siehe Statische und dynamische Mandanten | nur Administratoren |
allowedTenants | Liste, optional | weitere Mandanten, in die die Person wechseln darf | nur Administratoren |
locale | ein Wert, Standard de | die Sprache, in der die Person angesprochen wird | die Person selbst, auch in Keycloaks Kontoseite |
Die Namen von tenant und allowedTenants lassen sich umstellen, mit codamai.cias.token.claims.tenant-attribute und codamai.cias.token.claims.allowed-tenants-attribute. CIAS meldet sie dann unter dem neuen Namen an und liest sie auch unter diesem Namen aus dem Token. locale heißt immer so: Unter diesem Namen speichert Keycloak die Sprache ohnehin. Den Standardwert stellst du mit codamai.cias.locale.default ein.
Warum darf die Person tenant nicht selbst ändern, locale aber schon? tenant ist eine Aussage der Installation über die Person. Könnte sie sie ändern, setzte sie sich in die Daten eines fremden Kunden. locale ist eine Vorliebe, die der Person gehört. Wäre sie nur für Administratoren änderbar, würde Keycloaks eigener Sprachumschalter mit einem Fehler antworten.
Die Projektattribute
Ein Projektattribut entsteht aus dem Modell. Steht an einem Modell accessByAttribute, verbindet es ein Feld der Daten mit einem Attribut der Person, etwa das Feld region mit dem Attribut region. Der Generator sammelt alle diese Attribute über alle Modelle, jedes nur einmal, und meldet sie für CDMS an.
Jedes so erzeugte Attribut ist:
- mehrwertig: Die Person kann mehrere Werte haben, etwa
nordundwest. Der Filter macht daraus einIN. - optional, ohne Standardwert. Fehlt der Wert bei einer Person, lehnt CDMS ihre Anfrage an ein gefiltertes Modell ab, siehe Attributfilter.
- an die Person gebunden: ein Wert pro Person, in jedem Mandanten derselbe.
Hat dein Projekt kein Modell mit accessByAttribute, meldet CDMS gar kein Attribut an.
Ein Modul, das seine Anmeldung von Hand schreibt, kann mehr sagen: ein Pflichtattribut mit Standardwert, eine Vorliebe, die die Person selbst ändert, oder ein Wert pro Mandant. Siehe Attribute anmelden und Ein Wert pro Person oder pro Mandant.
Der Unterschied auf einen Blick
- steuert Mandant, Mandantenwechsel, Sprache
- immer da, wo CIAS läuft
- Name teils einstellbar
tenantundallowedTenantsnur für Administratoren
- schneidet Daten zu (Attributfilter)
- nur, wenn ein Modell
accessByAttributenutzt - Name aus dem Modell
- mehrwertig, optional, an die Person gebunden
Warum der Unterschied wichtig ist
| Wer meldet es an? | Wofür wird es gelesen? | Folgt daraus |
|---|---|---|
| CIAS | Mandant, Wechsel, Sprache | Plattformattribut. Ein falscher Wert führt die Person in einen falschen Mandanten oder sperrt sie aus |
| CDMS, aus dem Modell | Attributfilter | Projektattribut. Ein falscher Wert zeigt falsche Zeilen, ohne Fehlermeldung |
| niemand | – | kein angemeldetes Attribut. Es kommt nicht zuverlässig ins Token, und über CIAS darf es niemand je Mandant schreiben |
Beide Arten sind also Rechte, keine bloßen Daten. Wer einen Wert schreiben darf, bestimmt, was die Person sehen oder erreichen kann. Siehe Wer ein Attribut schreiben darf.