Zum Inhalt

DB-Schema-Detailprüfung UC08 – Benutzerverwaltung

Stand: 01.08.2026 14:55 Branch: docs/einheitliche-kopfbereiche Status: Abgeschlossen; Gegen vorhandene UC08-Spezifikation und Prisma-Zielschema v3 konzeptionell geprüft

Datum, Uhrzeit Version Änderung Autor
01.08.2026 14:55 1.0 Kopfbereich vereinheitlicht David Mittig
01.08.2026 11:12 1.0 Kopfbereich ergänzt David Mittig

1. Prüfgrundlage

Geprüft wurde gegen:

  • docs/developer/uc08/uc08-spezifikation.md,
  • backend/prisma/schema.prisma v3,
  • docs/developer/uc00/db-schema-zielbild-uc-matrix.md,
  • docs/developer/db-schema.md v6,
  • docs/management/roadmap.md.

Korrekturhinweis:

Die frühere Fassung dieser Detailprüfung enthielt die falsche Aussage, dass keine eigene UC08-Spezifikation gefunden wurde. Die Spezifikation existiert und wurde in dieser Nachprüfung berücksichtigt.

2. Fachlicher UC-Zweck aus der Spezifikation

UC08 ermöglicht einem Tenant, Benutzer innerhalb der eigenen Tauchschule zu verwalten.

Der Tenant-Admin kann Benutzer einladen, Rollen zuweisen, Benutzer aktivieren, deaktivieren, reaktivieren und relevante Sicherheits- sowie Auditinformationen prüfen.

3. Spezifikationsanforderungen gegen Prisma-Zielschema

Anforderung UC08 Prisma-Zielschema v3 Bewertung
Benutzerübersicht je Tenant User.tenantId abbildbar
Mitarbeiter einladen InvitationToken, UserRole.mitarbeiter abbildbar
weiteren Tenant-Admin einladen InvitationToken, UserRole.tenant_admin abbildbar
Benutzerrolle ändern User.role abbildbar
Benutzer deaktivieren / reaktivieren User.status abbildbar, Statuswerte abweichend
offene Einladungen anzeigen InvitationToken.status abbildbar
Einladung erneut senden / widerrufen InvitationToken.status, revokedAt abbildbar
Sicherheitsstatus anzeigen tfaEnabled, tfaRequired, AuthLog abbildbar
Login-Historie AuthLog, lastLoginAt abbildbar
Audit-Historie AuditLog abbildbar
letzter Admin-Schutz nicht DB-seitig, Backend-Logik abbildbar in Service
Token nicht im Klartext speichern Prisma speichert InvitationToken.token aktuell im Klartext Abweichung

4. Feld-für-Feld-Bewertung

4.1 User

Vorhandene Felder:

  • tenantId,
  • email,
  • username,
  • passwordHash,
  • role,
  • firstName,
  • lastName,
  • tfaSecret,
  • tfaEnabled,
  • tfaRequired,
  • lastLoginAt,
  • status,
  • deletedAt,
  • deletedById.

Bewertung:

  • V1-Benutzerverwaltung ist abbildbar.
  • User.email ist global eindeutig. Die UC08-Spezifikation enthält noch die Frage, ob Einladung an eine bereits plattformweit bekannte E-Mail-Adresse möglich sein soll. Die Schemaentscheidung lautet aktuell: globale E-Mail-Eindeutigkeit bleibt.

4.2 UserStatus

Prisma-Zielschema:

  • invited,
  • active,
  • suspended,
  • deactivated.

UC08-Spezifikation:

  • invited,
  • active,
  • inactive,
  • invitation_expired,
  • invitation_revoked,
  • locked.

Bewertung:

  • Statusmodell ist nicht vollständig deckungsgleich.
  • Einladungsspezifische Statuswerte liegen eher bei InvitationToken.status, nicht bei User.status.
  • inactive entspricht fachlich vermutlich deactivated.
  • locked entspricht fachlich vermutlich suspended, ist aber nicht identisch dokumentiert.

4.3 InvitationToken

Vorhandene Felder:

  • token,
  • tokenType,
  • invitedEmail,
  • invitedFirstName,
  • invitedLastName,
  • invitedRole,
  • status,
  • expiresAt,
  • usedAt,
  • revokedAt.

Bewertung:

  • Einladungsprozess ist abbildbar.
  • Die Spezifikation fordert token_hash, das Prisma-Zielschema speichert aktuell token als Klartextwert. Das ist eine sicherheitsrelevante Abweichung.

4.4 RefreshToken / AuthLog / AuditLog

Vorhanden:

  • RefreshToken,
  • AuthLog,
  • AuditLog.

Bewertung:

  • Sessions, Login-Historie und Auditierbarkeit sind grundsätzlich abbildbar.

5. Relevante Abweichungen / offene Designpunkte

Punkt Bewertung Empfehlung
Token laut Spezifikation nicht im Klartext Prisma speichert token tokenHash statt token prüfen
UserStatus weicht ab relevante Doku-/Schemaabweichung Statusmodell angleichen
tenant_users als mögliches Modell Prisma nutzt User.tenantId direkt V1 akzeptabel, V2 Multi-Tenant-User offen
user_security_events nicht vorhanden durch AuthLog abbilden oder später ergänzen
Deaktivierungsgrund nicht in User ggf. AuditLog ausreichend oder Feld ergänzen
globale E-Mail-Eindeutigkeit bewusst entschieden, aber UC08-O07 offen Spezifikation nachführen

6. Ergebnis

UC08 ist im Prisma-Zielschema v3 für V1-Benutzerverwaltung konzeptionell abbildbar.

UC08 ist nicht vollständig konsistent mit der Spezifikation, weil Token-Speicherung, Statusmodell und mögliche Multi-Tenant-Zuordnung noch abweichen.

Korrekte Statusformulierung:

UC08 ist gegen die vorhandene Spezifikation geprüft. Das Prisma-Zielschema v3 deckt den V1-Kern der Benutzerverwaltung ab; offene Designpunkte bestehen bei Token-Hashing, Statusmodell, Deaktivierungsgrund und globaler E-Mail-Eindeutigkeit.

7. Offene Nacharbeit

  • [ ] Entscheidung: InvitationToken.token durch tokenHash ersetzen oder aktuelles Modell begründen.
  • [ ] UC08-Statusmodell an UserStatus / InvitationToken.status angleichen.
  • [ ] Entscheidung: Deaktivierungsgrund im Schema ergänzen oder über AuditLog erfassen.
  • [ ] UC08-O07 zur globalen E-Mail-Eindeutigkeit nachführen.
  • [ ] Technische Prisma-Validierung bleibt offen.