Zum Inhalt springen

Account-Verwaltung

SpalteTypBeschreibung
idUUID (UUIDv7)Primary Key
password_hashVARCHARbcrypt Hash
display_nameVARCHAR(255)Anzeigename
roleENUMagency_owner, agency_employee, tenant_admin, tenant_member
tenant_idUUID (nullable)NULL fuer Agency-Mitarbeiter, gesetzt fuer Tenant-User
activeBOOLEANAccount-Sperre
twofactor_emailBOOLEAN2FA immer erzwingen (unabhaengig von Device)
localeVARCHAR(5)CMS-Sprache (Default: de)
Audit-Feldercreated_at, created_by, updated_at, updated_by, row_version, row_period

E-Mail-Adressen sind NICHT direkt am Account gespeichert. Stattdessen:

  • email Tabelle: Deduplizierte Adressen, SHA-256/BLAKE2b Hash
  • email_relation Tabelle: Verknuepft E-Mail mit Entitaet (Account, Kontakt, etc.)
  • Login-Lookup: email_relation (type: account_primary) → email.idaccount.id
  • Unterstuetzte Typen: account_primary, account_primary_change, contact_request, contact_confirmation
SpalteTypBeschreibung
idUUIDPrimary Key
nameVARCHARFirmenname
contact_nameVARCHARAnsprechpartner
contact_emailVARCHARKontakt-E-Mail
slugVARCHAR (unique)URL-freundlicher Bezeichner
activeBOOLEANTenant aktiv/inaktiv
RolleScopeBeschreibung
agency_ownerGlobalVollzugriff, verwaltet alles
agency_employeeGlobalAgency-Mitarbeiter (eingeschraenkt)
tenant_adminEigener TenantVerwaltet eigene Tenant-User und Sites
tenant_memberEigener TenantBearbeitet Inhalte
PrefixRollenBeschreibung
/api/public/*AlleKein Auth noetig
/api/protected/*Alle eingeloggtenLogout, Profil
/api/agency/*agency_owner, agency_employeeTenant-Verwaltung
/api/client/*tenant_admin, tenant_memberEigene Site-Verwaltung
/api/service/*X-Service-TokenAstro Build (Template-Sync, Content)
FunktionBeschreibung
Profil bearbeitenDisplay-Name und CMS-Sprache (de/en) aendern
Passwort aendernAltes Passwort als Bestaetigung, neues Passwort setzen
Sessions einsehenAktive Sessions mit Erstellungsdatum, aktuelle Session markiert
Session beendenEinzelne fremde Session terminieren
Alle anderen beendenAlle Sessions ausser der aktuellen terminieren
Funktionagency_ownertenant_admin
Accounts anlegenalle Rollennur tenant_member
Accounts deaktivieren/reaktivierenalle ausser sich selbsteigene tenant_member
Password-Reset ausloesenalle ausser sich selbsteigene tenant_member
Accounts auflistenalleeigener Tenant
  1. Admin loest Reset fuer Ziel-Account aus
  2. System generiert 6-stelligen kryptographischen Code (30 Min gueltig)
  3. Code wird per E-Mail an Ziel-Account gesendet
  4. Ziel-User gibt Code ein (oeffentliche Route, kein Login noetig)
  5. Nach Code-Verifikation: neues Passwort setzen
  6. Alle bestehenden Sessions werden terminiert
  • Neuer Account wird ohne Passwort erstellt
  • Admin muss anschliessend Password-Reset ausloesen
  • Ziel-User setzt Passwort ueber den Reset-Flow
  • account.locale Spalte (VARCHAR(5), Default ‘de’)
  • Session-Response liefert locale mit
  • Frontend setzt i18next.changeLanguage(locale) beim App-Start
  • Sprachwechsel im Profil aktualisiert sofort die UI-Sprache
  • Vollstaendige DE + EN Uebersetzungen fuer alle UI-Strings
MethodePfadAuthBeschreibung
PUT/api/protected/account/profileSessionProfil bearbeiten
PUT/api/protected/account/passwordSessionPasswort aendern
GET/api/protected/account/sessionsSessionSessions auflisten
DELETE/api/protected/account/sessions/{id}SessionSession beenden
DELETE/api/protected/account/sessionsSessionAlle anderen beenden
POST/api/agency/teamAgencyAccount anlegen
GET/api/agency/teamAgencyAccounts auflisten
PUT/api/agency/team/{id}/deactivateAgencyAccount deaktivieren
PUT/api/agency/team/{id}/reactivateAgencyAccount aktivieren
POST/api/agency/team/{id}/reset-passwordAgencyPassword-Reset
POST/api/client/teamClientAccount anlegen
GET/api/client/teamClientAccounts auflisten
PUT/api/client/team/{id}/deactivateClientAccount deaktivieren
PUT/api/client/team/{id}/reactivateClientAccount aktivieren
POST/api/client/team/{id}/reset-passwordClientPassword-Reset
POST/api/public/auth/verify-resetReset-Code pruefen
POST/api/public/auth/complete-resetPasswort zuruecksetzen
internal/feature/account/ # Self-Service
├── usecase.go # UpdateProfile, ChangePassword, ListSessions, TerminateSession
├── request.go # Request/Response Structs
└── errors.go # ErrInvalidCurrentPassword, etc.
internal/feature/team/ # Admin-Verwaltung
├── usecase.go # CreateAccount, ListAccounts, Deactivate, Reactivate, PasswordReset
├── request.go # Request/Response Structs
├── repository.go # Interfaces
├── jet_repository.go # Jet + Raw SQL Implementierungen
└── errors.go # ErrInsufficientPermission, etc.