8.5 KiB
Admin UI Konzept - Rollen- und Benutzerverwaltung
Version: 1.0
Datum: 21. Januar 2026
Status: Entwurf
Basis: mandate_implementation_gateway.md
Übersicht
Dieses Dokument definiert die Admin-UI-Struktur für die Verwaltung von Rollen, Mandanten und Feature-Zugriffen im Multi-Tenant-System.
Rollen-Kontexte (4 Ebenen)
| Kontext | mandateId | featureInstanceId | featureCode | isSystemRole | Beispiele |
|---|---|---|---|---|---|
| SYSTEM | null | null | null | true | admin, user, viewer |
| TEMPLATE | null | null | X (z.B. "trustee") | false | trustee-admin, chatbot-user |
| MANDATE | X | null | null | false | Mandant-spezifische Rollen |
| INSTANCE | X | Y | - | false | Instanz-spezifische Rollen |
Wichtig: Der Kontext einer Rolle (mandateId, featureInstanceId, featureCode) ist IMMUTABLE nach Erstellung!
Admin-Workflow (4 Schritte)
Schritt 1: Rollen verwalten
Seite: Rollen
Sicht: Konsolidierte Liste (System + Global + Mandant-spezifisch)
Inhalt: Alle Rollen die Mandanten-Mitgliedern zugewiesen werden können
| Feld | Beschreibung |
|---|---|
| roleLabel | Rollen-Name |
| description | Beschreibung (mehrsprachig) |
| mandateId | null (global/system) oder Mandant-ID (spezifisch) |
| Scope | Badge-Anzeige: "System", "Global" oder "Mandant" |
Rollen-Typen:
- System-Rollen (admin, user, viewer):
isSystemRole=true- können nicht gelöscht werden, nur Beschreibung editierbar - Globale Rollen (mandateId=null, isSystemRole=false): Gelten für alle Mandanten
- Mandant-Rollen (mandateId=xyz): Gelten nur für einen spezifischen Mandanten
Filter: featureCode=null AND featureInstanceId=null
Aktionen:
- Neue globale Rolle erstellen (Scope: "Global")
- Neue mandant-spezifische Rolle erstellen (Scope: "Mandant")
- Rolle bearbeiten (nur Beschreibung) - nicht für System-Rollen!
- Rolle löschen - nicht für System-Rollen!
Seite: Mandanten-Mitglieder
Sicht: Pro Mandant (Dropdown-Auswahl)
Inhalt: Benutzer die dem Mandanten zugeordnet sind
| Feld | Beschreibung |
|---|---|
| Benutzer | Username, E-Mail |
| Rollen | Zugewiesene Mandate-Rollen |
| Aktiv | enabled Flag |
Datenmodell:
User ─► UserMandate ─► Mandate
│
└─► UserMandateRole ─► Role
Aktionen:
- Benutzer zum Mandanten hinzufügen (+ Rollen zuweisen)
- Rollen eines Mitglieds bearbeiten
- Mitglied entfernen
Schritt 2: Feature-Template-Rollen bearbeiten
Seite: Feature-Rollen
Sicht: Pro Feature (Dropdown: Trustee, Chatbot, Workflow, etc.)
Inhalt: Template-Rollen für das ausgewählte Feature
| Feld | Beschreibung |
|---|---|
| roleLabel | Rollen-Name (z.B. trustee-admin) |
| description | Beschreibung |
| featureCode | Feature-Code (readonly) |
| AccessRules | Verknüpfte Berechtigungen |
Filter: featureCode=X AND mandateId=null AND featureInstanceId=null
Beispiel-Rollen pro Feature:
| Feature | Rollen |
|---|---|
| trustee | trustee-admin, trustee-accountant, trustee-client |
| chatbot | chatbot-admin, chatbot-user |
| chatworkflow | workflow-admin, workflow-editor, workflow-viewer |
| neutralization | neutralization-admin, neutralization-analyst |
| realestate | realestate-admin, realestate-manager, realestate-viewer |
Aktionen:
- Neue Feature-Rolle erstellen
- Beschreibung bearbeiten
- AccessRules verwalten (welche Tabellen mit welchen Berechtigungen)
- Rolle löschen
Schritt 3: Feature-Instanzen an Mandanten zuweisen
Seite: Feature-Instanzen
Sicht: Pro Mandant (Dropdown-Auswahl)
Inhalt: Feature-Instanzen die dem Mandanten zugeordnet sind
| Feld | Beschreibung |
|---|---|
| Feature | Feature-Typ (Trustee, Chatbot, etc.) |
| Instanz-Name | Label der Instanz |
| Erstellt | Erstellungsdatum |
| Benutzer | Anzahl zugewiesener Benutzer |
Datenmodell:
Mandate ─► FeatureInstance ─► Feature
Aktionen:
- Neue Feature-Instanz für Mandant erstellen
- Instanz umbenennen
- Instanz deaktivieren/löschen
Schritt 4: Feature-Instanz Benutzer zuweisen
Seite: Feature-Benutzer
Sicht: Kombinierte Auswahl (Mandant + Feature-Instanz)
UI: Zwei Dropdowns - Mandant wählen → Feature-Instanz wählen
Inhalt: Benutzer mit Zugriff auf die ausgewählte Feature-Instanz
| Feld | Beschreibung |
|---|---|
| Benutzer | Username, E-Mail (nur Mandanten-Mitglieder!) |
| Rollen | Zugewiesene Feature-Rollen |
| Aktiv | enabled Flag |
Datenmodell:
User ─► FeatureAccess ─► FeatureInstance
│
└─► FeatureAccessRole ─► Role (Template-Rollen)
Wichtig:
- Nur Benutzer die bereits Mandanten-Mitglieder sind können ausgewählt werden
- Rollen-Auswahl zeigt nur Feature-spezifische Template-Rollen
Aktionen:
- Benutzer zur Feature-Instanz hinzufügen (+ Rollen zuweisen)
- Rollen eines Benutzers bearbeiten
- Benutzer-Zugriff entfernen
Navigation Struktur
ADMINISTRATION
├── Benutzer (User-CRUD)
├── Einladungen (Invitation-Management)
├── Mandanten (Mandate-CRUD)
├── Rollen (Schritt 1 - System + Global + Mandant)
├── Mandanten-Mitglieder (Schritt 1 - Benutzer zuweisen)
├── Feature-Rollen (Schritt 2)
├── Feature-Instanzen (Schritt 3)
└── Feature-Benutzer (Schritt 4)
Berechtigungsfluss (Zusammenfassung)
┌─────────────────┐
│ User-Login │
└────────┬────────┘
│
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ SysAdmin │ │ Mandate │ │ Feature │
│ Flag │ │ Member │ │ Access │
└────┬─────┘ └────┬─────┘ └────┬─────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────┐ ┌──────────┐ ┌──────────┐
│ Alle │ │ Mandate │ │ Feature │
│ Rechte │ │ Roles │ │ Roles │
└─────────┘ └────┬─────┘ └────┬─────┘
│ │
└──────┬───────┘
│
▼
┌──────────┐
│ Access │
│ Rules │
└──────────┘
Technische Hinweise
Immutable Kontext-Felder
Die folgenden Felder einer Rolle können nach Erstellung NICHT geändert werden:
mandateIdfeatureInstanceIdfeatureCode
Grund: Diese Felder definieren den Kontext der Rolle. Eine Änderung würde die Semantik der Rolle ändern und könnte zu Sicherheitsproblemen führen.
UI-Konsequenz: Diese Felder werden bei Bearbeitung als readonly angezeigt. Um den Kontext zu ändern, muss eine neue Rolle erstellt werden.
Junction Tables für CASCADE DELETE
UserMandate ──► UserMandateRole ──► Role
FeatureAccess ──► FeatureAccessRole ──► Role
Beim Löschen einer Rolle werden automatisch alle Junction-Einträge gelöscht (CASCADE).
API Endpoints (Referenz)
| Aktion | Endpoint |
|---|---|
| Alle Rollen (für Mandant) | GET /api/rbac/roles?mandateId={id}&includeTemplates=true |
| Feature-Template-Rollen | GET /api/features/templates/roles?featureCode={code} |
| Feature-Instanz-Benutzer | GET /api/features/instances/{id}/users |
Änderungshistorie
| Version | Datum | Autor | Änderung |
|---|---|---|---|
| 1.0 | 21.01.2026 | System | Initiale Version |