ADR-011: Globale Benutzeridentität und E-Mail-Eindeutigkeit¶
Stand: 09.08.2026 17:32 Branch: main Status: Akzeptiert
| Datum, Uhrzeit | Version | Änderung | Autor |
|---|---|---|---|
| 09.08.2026 17:32 | 1.2 | Zentrale Normalisierung, globale Konfliktbehandlung, ausschliessliche Token-Hashspeicherung und Datenbankschutz umgesetzt | Codex |
| 09.08.2026 14:24 | 1.1 | Providerneutrale RLS-Strategie gemäss ADR-012 verknüpft | Codex |
| 06.08.2026 18:42 | 1.0 | Entscheidung für die globale E-Mail-Eindeutigkeit in V1 dokumentiert | Codex |
Kontext¶
UC00 benötigt eine eindeutige Benutzeridentität für Login, Einladungen, Tenant-Zuordnung und Superadmin-Zugriff. Der Login verwendet E-Mail-Adresse und Passwort ohne zusätzliche Tenant-Auswahl. Das Prisma-Schema führt User.email bereits als global eindeutiges Feld.
Zu entscheiden war, ob dieselbe E-Mail-Adresse in verschiedenen Tenants für getrennte Benutzerkonten verwendet werden darf.
Geprüfte Varianten¶
Variante A: E-Mail tenantbezogen eindeutig¶
Dieselbe E-Mail-Adresse könnte in mehreren Tenants vorkommen. Der Login müsste zusätzlich den Tenant kennen oder nach dem Login eine mehrdeutige Identität auflösen. Getrennte Konten derselben Person würden ausserdem getrennte Passwörter, 2FA-Daten und Recovery-Codes erzeugen.
Variante B: E-Mail global eindeutig¶
Eine normalisierte E-Mail-Adresse identifiziert genau einen Benutzer auf der gesamten Plattform. Der Login bleibt ohne Tenant-Auswahl eindeutig. In V1 kann dieser Benutzer höchstens einem Tenant angehören.
Späteres Zielmodell: globaler Benutzer mit Tenant-Mitgliedschaften¶
Falls eine Person mehreren Tenants angehören soll, bleibt die globale Identität bestehen. Rollen, Status und Zugehörigkeit werden dann in einem eigenen Mitgliedschaftsmodell wie UserTenantMembership geführt.
Entscheidung¶
Für V1 wird Variante B akzeptiert: Eine normalisierte E-Mail-Adresse identifiziert genau einen globalen Benutzer und ist tenantübergreifend eindeutig.
Es gelten folgende Regeln:
- Der Login erfolgt ohne Tenant-Auswahl.
- Ein Benutzer gehört in V1 höchstens einem Tenant an.
- Ein Superadmin besitzt keinen Tenant.
- E-Mail-Adressen werden vor Speicherung und Vergleich getrimmt und kleingeschrieben.
- Die Normalisierung gilt für Login, Einladung, Benutzeranlage, Einlösung einer Einladung, Änderung der E-Mail-Adresse und Seed-Daten.
- Deaktivierte und soft-gelöschte Benutzer behalten ihre E-Mail-Adresse.
- Eine Reaktivierung verwendet das bestehende Benutzerkonto.
- Eine endgültige Freigabe einer E-Mail-Adresse benötigt einen gesonderten kontrollierten Administrationsprozess.
- Mehrfachzugehörigkeiten sind nicht Bestandteil von V1.
Begründung¶
- Das bestehende Loginverfahren bleibt eindeutig und benötigt keinen Tenant-Kontext.
- Die Entscheidung entspricht der vorhandenen globalen Unique-Constraint im Prisma-Schema.
- Passwörter, 2FA und Recovery-Codes bleiben an eine globale Identität gebunden.
- Eine spätere Mehrfachzugehörigkeit kann sauber über Mitgliedschaften ergänzt werden, ohne doppelte Identitäten zu erzeugen.
Konsequenzen¶
- Eine Person kann in V1 nicht mit derselben E-Mail-Adresse separate Konten bei zwei Tauchschulen besitzen.
- Einladungen müssen vorhandene, deaktivierte und soft-gelöschte Adressen global berücksichtigen.
- Fachliche Vorprüfungen müssen kontrolliert
409 email_already_in_useliefern. - Die Datenbank-Constraint bleibt als Schutz gegen konkurrierende Schreibvorgänge bestehen.
- Eine normalisierte Adresse kann tenantübergreifend nur eine gültige offene Einladung besitzen; widerrufene und abgelaufene Einladungen bleiben als Historie erhalten.
- Gross-/Kleinschreibung darf keine zweite Identität erzeugen.
- Für V2 ist ein Backlog-Eintrag für globale Benutzer mit tenantbezogenen Mitgliedschaften erforderlich.
Umsetzungsstand¶
| Teil | Status |
|---|---|
Globale Prisma-Constraint User.email @unique |
Umgesetzt |
| Einheitliche zentrale E-Mail-Normalisierung | Umgesetzt |
| Globale Konfliktprüfung in Einladung, Benutzeränderung, Login und Einlösung | Umgesetzt |
| Kontrollierte Behandlung von Unique-Constraint-Konflikten | Umgesetzt |
| Ausschliessliche Hashspeicherung von Einladungstoken | Umgesetzt |
| Global eindeutige offene Einladungsadresse in PostgreSQL | Umgesetzt und in Entwicklung ausgerollt |
| OpenAPI-Fehlerfälle | Umgesetzt |
| Automatisierte Unit-, Datenbank-, Integrations- und E2E-Tests | In Bearbeitung; elf Unit- und ein zusätzlicher Datenbank-Laufzeittest erfolgreich, vollständige Integrations- und End-to-End-Tests offen |
V2-Backlog für UserTenantMembership |
Offen |
Die Kernimplementierung der Entscheidung ist umgesetzt. ADR-011 gilt erst nach den noch offenen vollständigen Integrations- und End-to-End-Tests sowie dem V2-Backlog-Eintrag als vollständig abgeschlossen.
Erforderliche Tests¶
- Doppelte E-Mail im selben Tenant wird abgewiesen.
- Doppelte E-Mail in einem anderen Tenant wird ebenfalls abgewiesen.
- Unterschiedliche Gross-/Kleinschreibung erzeugt keine zweite Identität.
- Eine Einladung für eine vorhandene Adresse wird abgewiesen.
- Deaktivierte oder soft-gelöschte Benutzer werden nicht neu angelegt.
- Eine Superadmin-Adresse kann nicht erneut für einen Tenant-Benutzer verwendet werden.
- Eine kollidierende E-Mail-Änderung liefert kontrolliert HTTP 409.
Verwandte ADRs und Folgearbeit¶
- ADR-012: Providerneutrale Row-Level-Security-Strategie (akzeptiert; Umsetzung offen)
- V2: Globalen Benutzer von Tenant-Mitgliedschaften trennen; Rollen und Status pro Mitgliedschaft führen; Tenant-Auswahl beziehungsweise Tenant-Wechsel nach Login prüfen.