CodamAIDocs
Themafertig

Attribute einer Person pflegen

Die drei Speicherorte für Attribute (CIAS-intern, Keycloak-Profil, je Mandant) und wer was schreiben darf.

Ausprägungen
CIAS-AttributeProfilattribute (landen im Token)Attribute je MandantDelegation je AttributObergrenze für Werte

Worum es geht

„Attribut“ heißt in CIAS: eine benannte Angabe zu einer Person, etwa department = Einkauf oder projects = alpha, beta. Solche Angaben können an drei Stellen liegen, und die Stelle entscheidet, wer sie liest und wer sie schreiben darf.

Die drei Speicher

Drei Orte für Attribute
CIAS-AttributeProfilattributeAttribute je Mandant
liegt inDatensatz in CIASKonto in KeycloakCIAS, je Person und Mandant
wirkt auf Anfragenneinja, über das Tokenja, ersetzen den Wert aus dem Token
lesenPlattform-Administrator, im DatensatzPlattform-AdministratorPlattform-Administrator oder Personen im selben Mandanten
schreibenPlattform-Administrator, ersetzt allePlattform-Administrator, je Schlüssellaut Delegation des Attributs und Obergrenze
EndpunktPOST /cias/admin/users/{id}/attributesGET / POST /cias/admin/users/{id}/profile-attributesGET / POST /cias/admin/users/{id}/tenant-attributes?tenantKey=…

Jeder Speicher

Wie man in jeden Speicher schreibt

Wann: Die Fachlichkeit will sich etwas merken, das keine Rechte berührt.

POST /cias/admin/users/{id}/attributes mit { "attributes": { "department": "Einkauf" } }. Der Aufruf ersetzt die ganze Menge: Was nicht mitgeschickt wird, ist danach weg. Gelesen werden die Werte mit dem Datensatz, GET /cias/admin/users/{id}. Die Registrierung legt ihre übrigen Formularfelder hier ab.

Ergebnis: Nur für Plattform-Administratoren. Keine Prüfung gegen einen Katalog.

Wann: Ein Modul braucht einen Wert im Token, etwa projects für einen Attributfilter.

POST /cias/admin/users/{id}/profile-attributes mit { "attributes": { "projects": "alpha,beta" } }. Nur die genannten Schlüssel ändern sich; ein leerer Wert entfernt den Schlüssel. CIAS schreibt jeden Schlüssel einzeln nach Keycloak und liest danach zurück, was Keycloak tatsächlich hält. Die Antwort ist dieser gelesene Stand.

Ergebnis: Nur für Plattform-Administratoren. Der Wert wirkt mit dem nächsten Token der Person.

Wann: Ein Wert soll nur in einem Mandanten gelten, etwa areas = nord in nordbau und areas = sued in suedlogistik.

POST /cias/admin/users/{id}/tenant-attributes?tenantKey=nordbau mit { "attributes": { "areas": ["nord"] } }. Je Schlüssel ersetzt die Liste die bisherigen Werte, eine leere Liste leert den Schlüssel. CIAS prüft alle Schlüssel, bevor es irgendetwas schreibt: Fällt einer durch, wird nichts geschrieben.

Ergebnis: Die Antwort ist alles, was die Person danach in diesem Mandanten hält.

Wie Attribute je Mandant bei einer Anfrage wirken, steht unter Ein Wert pro Person oder pro Mandant.

Wer ein Attribut je Mandant schreiben darf

Hier entscheidet nicht nur die Rolle „Plattform-Administrator“, sondern eine Prüfung je Attribut:

Darf dieser Aufrufer diesen Wert schreiben?
  1. CIAS
    angemeldet
    Ist der Aufrufer angemeldet?
    ↳ nein 403
  2. CIAS
    Katalog
    Hat ein Modul das Attribut angemeldet?
    ↳ nein 403, auch für Plattform-Administratoren
  3. CIAS
    Plattform-Administrator
    Dann erlaubt, auch für zurückgezogene Attribute
  4. CIAS
    zurückgezogen?
    Meldet das Modul das Attribut noch an?
    ↳ nein 403
  5. CIAS
    Delegation
    Hat der Aufrufer eine der Rollen, an die das Attribut delegiert ist?
    ↳ nein 403
  6. CIAS
    Obergrenze
    Liegt jeder geschriebene Wert in seinem eigenen Wert in diesem Mandanten?
    ↳ nein 403
  7. Werte werden geschrieben

Alle Ablehnungen sehen gleich aus: 403 cias.user.administration-denied. Welches Attribut und welche Prüfung, steht im Log.

  • Die Delegation je Attribut legt die Installation fest, mit einer Bean DeclaredAttributeDelegation: Attribut → Rollen, die es schreiben dürfen. Ohne diese Bean dürfen nur Plattform-Administratoren schreiben. Eine REST-Schnittstelle zum Ändern gibt es nicht; lesen lässt sie sich unter GET /cias/admin/attributes im Feld assignableBy. Siehe Wer ein Attribut schreiben darf.
  • Die Obergrenze vergleicht wie der Filter: an Kommas getrennt, * heißt alles. Wer selbst areas = nord, west hat, darf nord vergeben, aber nicht sued und nicht *. Leeren ist immer erlaubt, wenn die Delegation zustimmt. Siehe Die Obergrenze.

Lesen

GET /cias/admin/users/{id}/tenant-attributes?tenantKey=nordbau liefert alle Werte der Person in diesem Mandanten, als Listen. Lesen dürfen Plattform-Administratoren und Personen, deren eigener Mandant nordbau ist. Die Werte anderer Mandanten bleiben unlesbar.

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/cias-user – UserAdminController (attributes, profile-attributes, tenant-attributes), UserService (replaceAttributes, profileAttributes, writeProfileAttributes), TenantBoundAttributeService
  • CIAS/cias-authorization – AttributeWritePermission, AttributeContainment, ConferralCeiling, DeclaredAttribute, DeclaredAttributeDelegation
  • CIAS/cias-iam-keycloak – KeycloakIdentityAdapter (setAttribute)
  • CIAS/cias-authentication – EffectiveAttributes
  • CIAS/cias-authorization/docs/adr – ADR-040, ADR-043, ADR-048; CIAS/cias-authentication/docs/adr – ADR-042
Suchen