Zum Inhalt

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_use liefern.
  • 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