CodamAIDocs
Themafertig

Die zwei Rechte-Matrizen

Wie ein Recht getragen wird (Realm-Rolle, Client-Rolle, Organisationsrolle, Gruppe, Attribut) ist CIAS. Was ein Recht erlaubt (Modell, Operation, Feld) ist CDMS. Warum CIAS keine Modell-Operations-Matrix hält.

Ausprägungen
Matrix A: Träger eines RechtsMatrix B: Inhalt eines Rechts

Worum es geht

Wenn von „der Rechte-Matrix“ die Rede ist, sind oft zwei verschiedene Tabellen gemeint. Sie beantworten verschiedene Fragen, und nur eine davon liegt in CIAS.

  • Matrix A sagt, wie ein Recht getragen wird: Ist es eine Realm-Rolle, eine Client-Rolle, eine Rolle in einem Mandanten, eine Gruppe oder ein Attribut? Wo steht es im Token? Wer darf es vergeben? Das ist CIAS.
  • Matrix B sagt, was ein Recht erlaubt: Darf diese Rolle dieses Modell lesen, über dieses Feld in ein anderes Modell gehen, diese Zeile sehen? Das ist die Anwendung, bei CodamAI meist CDMS.

Die beiden Matrizen nebeneinander

Zwei Fragen, zwei Systeme
Matrix A
Träger eines Rechts · CIAS
  • Welche Rollen gibt es, auf welchem Client?
  • Gilt die Vergabe global oder in einem Mandanten?
  • Wo steht das Recht im Token?
  • Wer darf es vergeben?
  • Seit wann, bis wann?
Matrix B
Inhalt eines Rechts · CDMS
  • Welche Rolle braucht employee zum Lesen?
  • Welche Rolle braucht der Weg über employee.company?
  • Welches Attribut schneidet welche Zeilen zu?
  • Was ist mit eigenen Daten?

Matrix A: wie ein Recht getragen wird

Ein Recht kann auf fünf Arten an einer Person hängen. Jede Art landet an einer anderen Stelle im Token.

Was vergeben wirdTrägerPlatz im TokenGiltWer darf vergeben
Plattformadministration, KontextwechselRealm-Rollerealm_access.rolesüberall, in allen Modulennur ein Plattform-Administrator
Recht eines Moduls, in der ganzen InstallationClient-Rolle, global vergebenresource_access.<client>.rolesin allen Mandanten ohne eigene Rollennur ein Plattform-Administrator
Recht eines Moduls, in genau einem MandantenClient-Rolle, in der Organisation vergebenorganization.<alias>.resource_access.<client>.rolesnur in diesem Mandantenwer laut Delegation darf, im eigenen Mandanten
Bündel über Module hinwegGruppean den Plätzen der enthaltenen RollenplattformweitPlattform-Administrator
Reichweite auf ZeilenAttributeigener Claim, etwa projectsje Person oder je Person und Mandantje Mandant: wer laut Delegation des Attributs darf. An der Person: Plattform-Administrator

Ein paar Begriffe dazu:

  • Eine Realm-Rolle gilt im ganzen Keycloak-Realm, also für alle Module zugleich. Deshalb sind Realm-Rollen für das reserviert, was Module übergreift, etwa platform-admin und die beiden Kontextwechsel-Rollen. Ein Modul meldet nie eine Realm-Rolle an.
  • Eine Client-Rolle gehört zum Client eines Deployments, etwa cdms-backend. So hat jede Rolle einen zweiteiligen Namen: cdms-backend / hr-employee-read.
  • Delegation ist eine Liste am Rollenkatalog: Wer eine dieser Rollen hat, darf die Rolle weitergeben. Ohne Delegation vergibt nur ein Plattform-Administrator.

Global oder im Mandanten

Die spannende Zeile ist die dritte. Läuft eine Anfrage unter einem dynamischen Mandanten, und hat die Person dort eigene Rollen, dann ersetzen diese Rollen die global vergebenen Client-Rollen. Sie werden nicht addiert.

Welche Client-Rollen gelten für eine Anfrage?
Mandant der Anfrage dynamisch?Rollen im Mandanten vorhanden?Wirksame Client-Rollen
nein–die global vergebenen aus resource_access.<client>.roles
janeindie global vergebenen
jajanur die aus dem Mandanten, und davon nur die des eigenen Clients. Die globalen fallen weg

Realm-Rollen sind davon nie betroffen. Sie gelten immer.

Damit eine global vergebene Client-Rolle nicht still wirkungslos bleibt, lehnt CIAS sie ab, wenn der Heimatmandant der Person ein dynamischer Mandant ist. Die Rolle muss dann im Mandanten vergeben werden. Den Ablauf im Detail zeigt Effektive Rollen: global oder im Mandanten.

Attribute sind auch Rechte

Ein Attribut sieht nicht aus wie ein Recht, wirkt aber wie eines. projects = alpha, beta am Konto bedeutet in CDMS: Diese Person sieht nur Zeilen der Projekte alpha und beta. Ein Wert mehr ist mehr Reichweite, und * schaltet den Filter ab. Deshalb gehören Attribute in Matrix A: CIAS führt, wer sie schreiben darf, und prüft beim Schreiben die Obergrenze.

Matrix B: was ein Recht erlaubt

Matrix B steht im Modell der Anwendung. Bei CDMS wird sie im Hub modelliert und in den Code generiert.

FrageBeantwortet vonMehr dazu
Darf hr-employee-read das Modell employee lesen?CDMS, ModellrolleModellrollen
Darf die Person über das Feld employee.company in die Firma hinein?CDMS, FeldrolleFeldrollen
Welche Zeilen sieht jemand mit projects = alpha?CDMS, AttributfilterAttributfilter
Sieht jemand nur seine eigenen Daten?CDMS, Owner-FilterEigene Daten

CDMS liest dafür nur das Token. Es fragt CIAS nicht, ob eine Rolle „eigentlich“ vergeben sein sollte.

Wer beantwortet welche Frage?

Eine Frage, drei Stellen
  1. CIAS
    Rollenkatalog
    Gibt es cdms-backend / hr-employee-read? Wer darf sie vergeben?
  2. CIAS
    Token
    Ist das Token gültig? Welche Rollen gelten für diesen Client und Mandanten?
    ↳ nein 401
  3. CDMS
    Modell
    Erlaubt hr-employee-read das Lesen von employee?
    ↳ nein 403
  4. Daten werden geliefert

Warum CIAS keine Modell-Operations-Matrix hat

Man könnte meinen, es wäre praktisch, wenn CIAS auch wüsste, dass hr-employee-read das Modell employee lesen darf. Dann könnte eine CIAS-Oberfläche alles auf einen Blick zeigen. CIAS hält diese Tabelle trotzdem absichtlich nicht:

  • Sie wäre eine Kopie des Berechtigungsmodells jeder Anwendung. Kopien laufen auseinander.
  • Bei jeder Abweichung würde das Token gewinnen, denn CDMS prüft das Token und nicht CIAS. Die CIAS-Oberfläche würde dann eine falsche Antwort zeigen.
  • Nur die Anwendung weiß, was ihre Rollen bedeuten. Deshalb meldet sie ihre Rollen bei CIAS an, statt dass CIAS sie erfindet.

Weiter

Quellen im Code und in der Wissensdatenbank
  • CIAS/CLAUDE.md – §13.1 Rollentopologie, §13.2 Die Rechte-Matrix
  • CIAS/cias-authentication – EffectiveRoles, TokenParser
  • CIAS/cias-authorization – RoleAssignmentService.authorize, AttributeWritePermission
  • CIAS/cias-authorization/docs/adr – ADR-023, ADR-027, ADR-031, ADR-034, ADR-048
  • CIAS/cias-authentication/docs/adr – ADR-042
  • CDMS/cdms-authorization – AbstractAuthorizationLayer; CDMS/cdms-system-layer – AbstractAttributeFilter
Suchen