Benutzerverwaltung¶
Pfad: /admin/users (nur für Rolle admin sichtbar)
Die Benutzerverwaltung steuert, wer sich anmelden darf, was ein Benutzer sehen darf (Module) und was er tun darf (Permissions).
Datenmodell¶
Ein Benutzer hat folgende Felder:
| Feld | Typ | Beschreibung |
|---|---|---|
email |
string (unique) | Login-Identifikator |
password_hash |
string (scrypt) | Werkzeug-generated, nie im Klartext |
display_name |
string | Anzeigename (optional) |
roles |
array |
Eine oder mehrere Rollen (siehe unten) |
allowed_modules |
array |
Whitelist sichtbarer Module. null = alle aus Rollen |
extra_permissions |
array |
Zusätzliche Permissions jenseits der Rolle |
active |
bool | false = Login gesperrt |
Rollen¶
Rollen sind Präsets von Permissions. Ein Benutzer kann mehrere Rollen haben (additiv).
Übergreifende Rollen¶
| Rolle | Beschreibung |
|---|---|
admin |
Alle Permissions (Modul + Admin) |
editor |
Lesen + Schreiben + Export auf alle Module |
viewer |
Nur-Lese auf alle Module |
auditor |
viewer + admin:audit |
Modul-spezifische Rollen¶
Pro Modul gibt es eine <modul>_editor-Rolle, z.B.:
cra_editor,cra_viewernis2_editordora_editoraiact_editordsgvo_editorgutachten_editorrisikobewertung_editorfirmen_editor
Permissions¶
Pro Modul gibt es typischerweise drei Permissions:
| Permission | Bedeutung |
|---|---|
<module>:read |
Anforderungen + Bewertungen einsehen |
<module>:write |
Bewertungen anlegen / ändern |
<module>:export |
PDF/DOCX/XLSX-Reports erzeugen |
Modul-spezifische Permissions:
| Permission | Modul | Bedeutung |
|---|---|---|
cra:prefill |
CRA | KI-Vorbefüllung von Bewertungen |
cra:issue_link |
CRA | GitHub-/GitLab-Issues verknüpfen |
gutachten:frameworks |
Gutachten | Framework-Bibliothek (Download/Ingest) |
Admin-Permissions:
| Permission | Bedeutung |
|---|---|
admin:users |
Benutzerverwaltung |
admin:roles |
Rollen verwalten (Reserve) |
admin:audit |
Audit-Log einsehen |
admin:config |
Konfiguration / Framework-Bibliothek |
Modul-Sichtbarkeit (allowed_modules)¶
Standardmäßig sieht ein Benutzer alle Module, für die er aufgrund
seiner Rollen mindestens eine :read-Permission hat.
Mit allowed_modules (Whitelist) lässt sich das einschränken:
allowed_modules |
Effekt |
|---|---|
null (Standard) |
Alle Module aus Rollen sichtbar |
["cra", "nis2"] |
Nur CRA und NIS2 sichtbar — auch wenn Rolle mehr erlaubt |
[] (leer) |
Keine Module sichtbar (nur Login möglich) |
Beispiel: Ein Admin, der die Suite verwaltet, aber nur DSGVO-Bearbeitung machen
soll, bekommt Rolle admin + allowed_modules: ["dsgvo"].
Effektive Permissions¶
Die im JWT eingebetteten effektiven Permissions ergeben sich aus:
effective = (
permissions_from_roles(user.roles)
∪ user.extra_permissions
)
Sie werden über das Admin-Bearbeiten-Modal in der Sektion "Effektive Permissions" angezeigt.
Workflow „Neuer Benutzer"¶
- Admin → 👥 Benutzerverwaltung → "+ Neuer Benutzer"
- E-Mail, Anzeigename, Passwort (≥ 8 Zeichen)
- Rollen wählen (z.B.
dsgvo_editor+gutachten_editor) - Sichtbare Module:
- Standard: "Alle Module aus Rolle automatisch freischalten"
- Oder Whitelist setzen
- Zusätzliche Permissions (optional, z.B.
admin:auditfür reinen Audit-Zugriff) - Aktiv anhaken
- Speichern
API-Endpoints¶
| Endpoint | Methode | Permission |
|---|---|---|
/api/admin/users |
GET | admin:users |
/api/admin/users/<id> |
GET | admin:users |
/api/admin/users |
POST | admin:users |
/api/admin/users/<id> |
PUT | admin:users |
/api/admin/users/<id> |
DELETE | admin:users |
/api/admin/users/<id>/disable |
POST | admin:users |
/api/admin/permissions/catalog |
GET | admin:users |
/permissions/catalog liefert die UI-Datenstruktur:
- alle Module mit Modul-Permissions (für Checkbox-Grids)
- alle Rollen mit ihren Permission-Listen
- alle Admin-Permissions (separat)
JWT-Inhalt¶
Nach erfolgreichem Login enthält der JWT-Identity-Block:
{
"user_id": "user-001",
"email": "admin@example.com",
"roles": ["admin"],
"permissions": ["cra:read", "cra:write", "..."],
"extra_permissions": [],
"allowed_modules": null,
"display_name": "Max Mustermann"
}
Permission-Checks im Backend nutzen @require_permission('module:action'),
das sowohl Rollen-Permissions als auch extra_permissions berücksichtigt.
Demo-Benutzer¶
Im Dev-Modus (ENABLE_DEMO_USERS=true) werden zwei Default-User angelegt:
| Passwort | Rollen | |
|---|---|---|
| admin@example.com | admin-password | admin |
| editor@example.com | editor-password | cra_editor |