Zum Hauptinhalt springen

Berechtigungen verstehen (CASL)

Zweck

SpeamCore steuert jede Sichtbarkeit und jede Aktion über CASL — ein offenes JavaScript-Framework für attribut- und rollenbasierte Zugriffssteuerung. Dieses Kapitel erklaert das Modell so, dass Sie als Administrator im Advanced Permission Editor Rollen und Berechtigungen korrekt zuweisen koennen — und damit jede Doku-Seite mit ihrer Berechtigungs-Liste richtig verstehen.

Voraussetzungen

- Sie sind Administrator des Mandanten oder haben das Recht, Rollen zu konfigurieren. - Grundkonzepte: SpeamID nutzt **Keycloak** als Identity-Provider — siehe [SpeamID/Keycloak](/konzepte/mandanten).

Das Modell auf einen Blick

Eine Berechtigung in SpeamCore besteht aus zwei Teilen:

Action + Subject
────── ───────
view Customer
create SalesDocument
do OfflineMode
  • Action — was darf gemacht werden? (view, create, update, delete, do, is)
  • Subject — auf welchem Objekt? (Customer, Workorder, SalesDocument, …)

Anwender bekommen nicht direkt Berechtigungen, sondern Rollen in Keycloak. Beim Login übersetzt SpeamCore diese Rollen in CASL-Regeln.

Die zwei Berechtigungs-Ebenen

SpeamCore trennt bewusst zwischen Frontend-Sichtbarkeit und API-Datenzugriff:

EbeneBeispiel-SubjectZweck
Frontend-Page-GuardFE_CustomerDarf der Anwender die Seite ueberhaupt aufrufen / im Menue sehen?
API-DatenzugriffCustomerDarf der Anwender die zugrundeliegenden Daten lesen oder schreiben?

Ein Anwender, der FE_Customer hat, aber nicht Customer:view, sieht die Seite — bekommt aber leere Listen (oder 403-Fehler bei direktem API-Zugriff). Umgekehrt: Wer Customer:view hat, aber nicht FE_Customer, kann nicht über die UI auf Kundendaten zugreifen, wohl aber über API-Tokens (z. B. Integrationen).

In jeder Doku-Seite zu einer Funktion finden Sie deshalb zwei Tabellen:

  • „Frontend-Page-Guard" — die FE_…-Subjects.
  • „API-Datenzugriff" — die regulären Subjects für die jeweiligen Endpoints.

Actions im Detail

ActionBedeutungBeispiel
viewLesen — Liste, Detail, Sucheview Customer
createAnlegencreate SalesDocument
updateÄndern bestehender Datensaetzeupdate Workorder
deleteLöschendelete TextBlock
doSpezialaktionen, die nicht in CRUD passendo OfflineMode, do TakeOverSalesDocument
isZustands-Checks (kein Schreibzugriff)is Admin

do-Actions sind workflow-spezifisch — z. B. do WorkorderCreateSalesDocument schaltet den Button „Aus Auftrag Verkaufsbeleg erstellen" frei. Welche do-Actions eine Funktionsseite braucht, steht in jeder Routen-Doku.

Subjects im Detail

SpeamCore hat über 400 Subjects. Sie folgen drei Mustern:

1. API-Entitaeten — entsprechen Datenmodellen im Backend.

Customer, Location, Contact, Workorder, Service,
Product, Warehouse, SalesDocument, PurchaseDocument,
Employee, EmployeeContract, TimeTracking, Mailbox, …

2. Frontend-Page-Guards — alle mit FE_-Praefix.

FE_Customer, FE_Workorder, FE_SetupWizard,
FE_Dashboard, FE_PurchaseDocument, …

3. Custom-Capabilities — weder Datenmodell noch Page, sondern Faehigkeiten.

OfflineMode, Print, Language, BusinessAnalysis, …

Keycloak-Rollen → CASL-Regeln

Ihre Administratoren weisen in Keycloak (SpeamID) Rollen zu. SpeamCore lest diese Rollen beim Login und übersetzt sie in CASL-Regeln.

Konvention der Rollennamen:

APP_SPEAMCORE_<ACTION>_<SUBJECT>[?<FELD-MASKE>]

Beispiele:

Keycloak-RolleCASL-Regel
APP_SPEAMCORE_VIEW_CUSTOMER{action: 'view', subject: 'Customer'}
APP_SPEAMCORE_CREATE_SALESDOCUMENT{action: 'create', subject: 'SalesDocument'}
APP_SPEAMCORE_NOT_VIEW_PRODUCT?SELL_PRICE+CREATED_ATDeny view Product auf den Feldern SELL_PRICE und CREATED_AT
APP_SPEAMCORE_DO_OFFLINEMODE{action: 'do', subject: 'OfflineMode'}

Deny-Regeln entstehen über den NOT_-Praefix. Damit lassen sich z. B. Verkaufspreise vor bestimmten Mitarbeitern ausblenden.

Feld-Maskierung über ?<FIELD>+<FIELD>+…. Mehrere Felder mit + getrennt.

Praxis: Wie Sie eine Doku-Seite lesen

Beispiel aus der Doku zu Bestellbelegen (/purchase-documents):

casl_fe:
- FE_PurchaseDocument:view
casl:
- PurchaseDocument:view
- PurchaseDocument:create
- PurchaseDocument:update

Daraus folgt für den Administrator:

Damit der Anwender Bestellbelege voll bedienen kann, braucht die Rolle in Keycloak:

APP_SPEAMCORE_VIEW_FE_PURCHASEDOCUMENT
APP_SPEAMCORE_VIEW_PURCHASEDOCUMENT
APP_SPEAMCORE_CREATE_PURCHASEDOCUMENT
APP_SPEAMCORE_UPDATE_PURCHASEDOCUMENT

Reine Lese-Rolle (z. B. für Buchhaltung) braucht nur VIEW_FE_PURCHASEDOCUMENT und VIEW_PURCHASEDOCUMENT.

Wenn ein Anwender eine bestimmte Aktion nicht ausführen kann, fragen Sie nach der **exakten Doku-Seite** der Funktion. In jeder Doku-Seite stehen die noetigen Subjects und Actions in den Frontmatter-Feldern `casl:` und `casl_fe:`. Damit kann der Administrator zielgenau ergaenzen — ohne zu raten.

Wo Berechtigungen geprüft werden

Die Prüfung passiert an drei Stellen:

StelleMechanismusDatei (Code-Referenz)
Frontend RoutesrequiredAbility in routes.tsxspeamcore.com/src/routes.tsx
Frontend KomponentenuseAbility().can(action, subject)überall in src/pages/...
Backend RouterscaslMiddleware([['<action>', '<subject>']])api.speamcore.com/src/routers/*.router.ts

Wenn FE und BE divergieren — etwa weil die FE-Seite sichtbar ist, aber der API-Aufruf 403 wirft — ist eine der drei Stellen falsch. Doku und Code-Drift-Check erkennen das später automatisch.

Wiederverwendbare Konzepte

  • Mandanten-Modell — wie sich Berechtigungen zwischen Mandanten unterscheiden.

Verknuepfungen zu anderen Modulen

  • Jede Routen-Funktionsseite enthält eine Sektion Berechtigungen (CASL) mit den exakten Subjects.
  • Die Ersteinrichtung ist nur für Mandanten-Administratoren zugaenglich (FE_SetupWizard:view).

Häufige Fehler und Lösungen

FehlerLösung
Anwender sieht Seite, bekommt aber leere ListeAPI-Subject (Customer:view) fehlt — nur Page-Guard (FE_Customer:view) gesetzt.
Anwender bekommt 403 beim Speichernupdate-Action fehlt — Page-Guard und view reichen nicht.
Button ist sichtbar, aber ausgegrautSpezial-do-Subject fehlt. Doku-Seite zur Funktion prüfen.
Verkaufspreise sind ausgeblendetDeny-Regel NOT_VIEW_PRODUCT?SELL_PRICE ist gesetzt. Mit Administrator klaeren.

Versionshinweise

  • 2026-04-29: Initiale Veroeffentlichung als Querschnitts-Konzept.