4 not 5 admin parts for roles

This commit is contained in:
ValueOn AG 2026-01-21 15:57:34 +01:00
parent b0ffd52556
commit b1e63d758e

View file

@ -0,0 +1,255 @@
# 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 |