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.prismav3,docs/developer/uc00/db-schema-zielbild-uc-matrix.md,docs/developer/db-schema.mdv6,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.emailist 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 beiUser.status. inactiveentspricht fachlich vermutlichdeactivated.lockedentspricht fachlich vermutlichsuspended, 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 aktuelltokenals 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.tokendurchtokenHashersetzen oder aktuelles Modell begründen. - [ ] UC08-Statusmodell an
UserStatus/InvitationToken.statusangleichen. - [ ] Entscheidung: Deaktivierungsgrund im Schema ergänzen oder über AuditLog erfassen.
- [ ] UC08-O07 zur globalen E-Mail-Eindeutigkeit nachführen.
- [ ] Technische Prisma-Validierung bleibt offen.