Skip to Content

Rollen & Berechtigungen (RBAC)

Auris implementiert rollenbasierte Zugriffskontrolle (RBAC) mit einem Tri-State-Berechtigungsauflösungsmodell: Berechtigungen können explizit ALLOW, explizit DENY oder INHERIT (von der Rollenvorgabe übernehmen) sein. Benutzerspezifische Berechtigungsüberschreibungen haben Vorrang vor Rollenberechtigungen und ermöglichen feingranulare Ausnahmen ohne dedizierte Rollen.


Berechtigungsformat

Alle Berechtigungen in Auris folgen dem aktion:ressource-Muster:

manage:users view:invoices create:tickets edit:roles approve:expenses delete:documents assign:tickets sign:interventions export:reports

Die Komponente aktion beschreibt, was die Berechtigung ermöglicht. Gängige Aktionen: view, create, edit, delete, manage, approve, assign, export, sign, generate.

Die Komponente ressource beschreibt die Entität oder Funktion, auf die zugegriffen wird. Ressourcen entsprechen Modulen in deiner Anwendung.

Es gibt eine spezielle Berechtigung — admin:all — die uneingeschränkten Zugriff auf alle Ressourcen gewährt, wenn sie von einer Rolle gehalten wird. Sie ist der eingebauten Administrator-Rolle zugewiesen.


Rollen erstellen

Über die Console

  1. Navigiere zu Console → Roles → Create Role
  2. Gib einen Namen ein (z. B. Rechnungsmanager), eine optionale Beschreibung und wähle eine Farbe für das Rollen-Badge
  3. Die Rolle wird ohne Berechtigungen erstellt. Konfiguriere Berechtigungen auf der Detailseite der Rolle.

Über die API

POST/api/rolesRequires: manage:roles

Erstellt eine neue Rolle. Body: { name: string, description?: string, color?: string }.

// Mit dem Auris Management Client const management = await createManagementClient({ ... }) const role = await management.roles.create({ name: 'Rechnungsmanager', description: 'Kann Rechnungen erstellen und anzeigen, aber nicht löschen', color: '#3b82f6', })

Berechtigungen konfigurieren

Berechtigungskategorien

Der Console-Berechtigungseditor organisiert Berechtigungen in 10 Kategorien:

KategorieBeispiel-Berechtigungen
Dokumenteview:invoices, create:quotes, approve:expenses, sign:interventions
Benutzerview:users, manage:users, import:users, export:users
Rollenview:roles, manage:roles, assign:roles
Anwendungenview:applications, manage:applications, manage:api_keys
Organisationenview:organizations, manage:organizations, manage:sso_connections
Sicherheitview:audit_logs, manage:attack_protection, view:sessions
Abrechnungview:billing, manage:subscriptions
Integrationenview:integrations, manage:webhooks, manage:automations
Infrastrukturview:monitoring, manage:devices, manage:firewalls
Supportview:tickets, create:tickets, assign:tickets, manage:sla

Berechtigungen für eine Rolle setzen

In der Console hat jede Berechtigung auf der Detailseite der Rolle einen Drei-Wege-Schalter:

  • ALLOW — Die Berechtigung wird Benutzern mit dieser Rolle gewährt
  • DENY — Die Berechtigung wird explizit verweigert und überschreibt geerbtes ALLOW aus anderen Rollen
  • INHERIT — Die Rolle gewährt noch verweigert diese Berechtigung nicht (Standard)

Einem Benutzer wird eine Berechtigung gewährt, wenn eine seiner Rollen sie auf ALLOW gesetzt hat und keine seiner Rollen sie auf DENY gesetzt hat.

Über die API

PATCH/api/roles/:id/permissionsRequires: manage:roles

Rollenberechtigungen aktualisieren. Body: { permissions: { [permission: string]: 'ALLOW' | 'DENY' | 'INHERIT' } }.


Rollen Benutzern zuweisen

Rollen werden Benutzern in der Console (Users → [Benutzer] → Tab Roles) oder über die API zugewiesen:

POST/api/users/:id/rolesRequires: manage:users

Weist einem Benutzer eine oder mehrere Rollen zu. Body: { roleIds: string[] }.

DELETE/api/users/:id/roles/:roleIdRequires: manage:users

Entfernt eine Rolle von einem Benutzer.

Benutzer können mehrere Rollen haben. Berechtigungen aus allen Rollen werden zusammengeführt. Wenn eine Rolle DENY für eine Berechtigung hat, überschreibt dies ALLOW aus anderen Rollen.


Benutzerspezifische Berechtigungsüberschreibungen

Einzelnen Benutzern können direkt Berechtigungen zugewiesen werden, unabhängig von ihren Rollen. Benutzerüberschreibungen haben Vorrang vor allen Rollenberechtigungen:

  • Ein benutzerspezifisches ALLOW gewährt die Berechtigung, auch wenn keine Rolle sie gewährt
  • Ein benutzerspezifisches DENY blockiert die Berechtigung, auch wenn eine Rolle ALLOW gewährt

Console: Users → [Benutzer] → Tab Permissions → Add Override

POST/api/users/:id/permission-overridesRequires: manage:users

Setzt eine Berechtigungsüberschreibung für einen bestimmten Benutzer. Body: { permission: string, effect: 'ALLOW' | 'DENY' }.


Berechtigungen prüfen

Serverseitig (API-Routen)

Verwende den requirePermission()-Helfer, um Berechtigungen in API-Routen durchzusetzen:

// app/api/invoices/route.ts import { requirePermission } from '@auris/nextjs/server' const config = { domain: process.env.NEXT_PUBLIC_AURIS_DOMAIN!, clientId: process.env.NEXT_PUBLIC_AURIS_CLIENT_ID!, } export const GET = requirePermission('view:invoices', config, async (req, { session }) => { // Wird nur erreicht, wenn der Benutzer die Berechtigung view:invoices hat const invoices = await getInvoices(session.user.id) return Response.json(invoices) }) export const POST = requirePermission('create:invoices', config, async (req, { session }) => { const body = await req.json() const invoice = await createInvoice(body, session.user.id) return Response.json(invoice, { status: 201 }) })

Clientseitig (React-Komponenten)

import { useCheckPermission, usePermissions } from '@auris/react' // Eine einzelne Berechtigung prüfen function InvoiceActions() { const { allowed: canCreate, isLoading } = useCheckPermission('create:invoices') const { allowed: canDelete } = useCheckPermission('delete:invoices') if (isLoading) return null return ( <div> {canCreate && <button>Neue Rechnung</button>} {canDelete && <button>Auswahl löschen</button>} </div> ) } // Mehrere Berechtigungen gleichzeitig prüfen function DashboardNav() { const { has, hasAll, hasAny } = usePermissions([ 'view:invoices', 'view:quotes', 'manage:users', 'view:billing', ]) return ( <nav> {has('view:invoices') && <a href="/invoices">Rechnungen</a>} {has('view:quotes') && <a href="/quotes">Angebote</a>} {has('manage:users') && <a href="/users">Benutzer</a>} {has('view:billing') && <a href="/billing">Abrechnung</a>} {hasAll(['view:invoices', 'view:quotes']) && <a href="/documents">Alle Dokumente</a>} {hasAny(['manage:users', 'manage:roles']) && <a href="/de/admin">Admin</a>} </nav> ) }

Berechtigungs-API

POST/api/roles/check

Prüft eine oder mehrere Berechtigungen für den authentifizierten Benutzer. Body: { permissions: string[] } oder { permission: string }. Gibt ein Array von { permission, allowed }-Objekten zurück.

GET/api/rolesRequires: view:roles

Listet alle Rollen im Tenant auf, einschließlich Berechtigungs- und Benutzerzahlen.

GET/api/roles/:idRequires: view:roles

Gibt eine bestimmte Rolle einschließlich ihres vollständigen Berechtigungssatzes zurück.

DELETE/api/roles/:idRequires: manage:roles

Löscht eine Rolle. Benutzer, die diese Rolle hatten, verlieren die zugehörigen Berechtigungen sofort.


Berechtigungsauflösungsreihenfolge

Bei der Auflösung, ob ein Benutzer eine bestimmte Berechtigung hat, folgt Auris dieser Priorität:

  1. Benutzerspezifisches DENY-Override — Falls vorhanden, wird die Berechtigung verweigert. Keine weitere Auswertung.
  2. Benutzerspezifisches ALLOW-Override — Falls vorhanden (und kein DENY), wird die Berechtigung gewährt.
  3. Rollenberechtigungen — Wenn eine Rolle ALLOW hat und keine Rolle DENY hat, wird die Berechtigung gewährt.
  4. Implizite Verweigerung — Wenn keine Regel die Berechtigung gewährt, wird sie verweigert.
Benutzer-Override DENY → VERWEIGERT (hört hier auf) Benutzer-Override ALLOW → GEWÄHRT (hört hier auf) Jede Rolle DENY → VERWEIGERT (hört hier auf) Jede Rolle ALLOW → GEWÄHRT Keine Übereinstimmung → VERWEIGERT

Anwendungsspezifische Berechtigungen

Berechtigungen können optional auf eine bestimmte Anwendung beschränkt werden. Wenn eine applicationId in einer Berechtigungsprüfung enthalten ist, wertet Auris Berechtigungen im Kontext dieser Anwendung aus — nützlich für Multi-Anwendungs-Tenants, bei denen Rollen pro Anwendung unterschiedlich sein können.

const result = await fetch('/api/roles/check', { method: 'POST', headers: { Authorization: `Bearer ${accessToken}`, 'Content-Type': 'application/json' }, body: JSON.stringify({ permissions: ['view:invoices', 'create:invoices'], applicationId: 'app-id-for-billing-app', }), })

Verwandte Anleitungen