- SEC-01: Privilege Escalation verhindert — Rollenhierarchie in Create/Update/DeleteUser - SEC-02: Tenant-Isolation in Update/DeleteUser — domain_admin nur eigene Nutzer - SEC-03: IMAP/POP3 Owner-Check via auth.HasRole statt direktem String-Vergleich - SEC-05: Export PDF/ZIP prüft Tenant-Zugehörigkeit vor Dateiausgabe - SEC-08: HKDF-SHA256 trennt JWT-Secret von AES-Key (archivmail-jwt-v1 / archivmail-aes-v1) - SEC-17: handleSecurityFix erfordert requireRole(superadmin) - SEC-22: Mail-ID Regex [0-9a-f]{64} in allen Handlern (Path-Traversal-Schutz) - SEC-26: SMTP Fail-Closed — leere AllowedIPs blockiert alles statt zu erlauben - SEC-28: handleGetRaw — Parse-Fehler bricht ab statt Fallthrough zu Dateizugriff BREAKING: IMAP/POP3/LDAP-Passwörter müssen nach Deploy einmalig neu eingegeben werden (neuer AES-Key). JWT-Sessions laufen ab (einmaliges Re-Login nötig). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Phase 2a: userstore domain_admin/superadmin Rollen, User.TenantID, ListByTenant, UpsertLDAPUser mit tenantID Phase 2b: storage.Save() mit tenantID *int64, email_refs Tabelle, GetTenantForMail, GetAllIDsByTenant, StatsByTenant Phase 2c: JWT-Claims tenant_id/tenant_slug, Session.TenantID, Login Domain-Erkennung via E-Mail-Domain Phase 3: tenantMiddleware, Handler-Filterung (Users, Mail, Stats) Phase 5: SMTP Domain-Routing via DomainToTenantFunc Callback, config smtp.tenant_routing + default_tenant_id Phase 8: archivmail migrate-tenants Subkommando PROJ-2: Upload-Seite /admin/upload mit DropZone + Progress-Polling Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Systemauslastungs-Sektion wird immer gerendert (nicht nur bei Erfolg) - Fehlermeldung wenn /api/admin/system/stats nicht erreichbar ist - Feature-Status auf In Review gesetzt Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>