255 lines
8.5 KiB
Markdown
255 lines
8.5 KiB
Markdown
# Admin UI Konzept - Rollen- und Benutzerverwaltung
|
|
|
|
**Version:** 1.0
|
|
**Datum:** 21. Januar 2026
|
|
**Status:** Entwurf
|
|
**Basis:** [mandate_implementation_gateway.md](./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:
|
|
- `mandateId`
|
|
- `featureInstanceId`
|
|
- `featureCode`
|
|
|
|
**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 |
|