Verwaltung mehrerer Postfächer je Mandant: Anlage, getrennte Abrufkonfiguration pro Postfach. - store.go: Postgres-Store, beliebig viele unabhängige Postfächer je Mandant, eigene Abrufparameter (Intervall, Host/Port/Benutzername, Ordnerauswahl) je Postfach. Passwort nie im Klartext gespeichert — Wiederverwendung von mail/internal/crypto (ARC-02, unverändert) für Envelope-Encryption. List filtert strikt nach tenant_slug, Update/Delete streng auf tenant_slug+id beschränkt. Prüfungen (alle real durchgeführt, siehe mail/docs/IMP-07-PRUEFPROTOKOLL.md): 1. TestList_TwoTenantsWithMultipleMailboxesSeeOnlyOwn: zwei Mandanten sehen real ausschließlich eigene Postfächer. 2. TestDelete_DoesNotAffectSiblingMailboxes: Löschen real ohne Auswirkung auf Geschwister-Postfächer. 3. TestUpdate_ConfigChangeDoesNotAffectOtherMailboxes: Änderung real isoliert auf ein Postfach beschränkt. Kein Umbau: mail/internal/crypto unverändert wiederverwendet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HhgFcLS8tYMhDJpP74C6AQ
2.5 KiB
2.5 KiB
IMP-07 – Prüfprotokoll: Mehrfach-Postfach-Verwaltung pro Tenant
Voraussetzung IMP-01 (Fertig), Core TEN-01/TEN-02 (Fertig, Tenant-Datenmodell & Onboarding).
Umsetzung
mail/internal/mailboxconfig/store.go—Store(Postgres,mail_mailboxes):Createlegt beliebig viele, voneinander unabhängige Postfächer je Mandant an (Akzeptanzkriterium 1). Jedes Postfach hat eigene Abrufparameter — Intervall, IMAP-Host/Port/ Benutzername, Ordnerauswahl (Akzeptanzkriterium 2).- Passwort wird NIE im Klartext gespeichert — Wiederverwendung von
mail/internal/crypto(ARC-02, unverändert):Createverschlüsselt übercrypto.Service.Seal,GetDecryptedPasswordentschlüsselt bei Bedarf übercrypto.Service.Open, als separater, bewusster Aufruf (nicht Bestandteil vonList, damit Zugangsdaten nicht beiläufig mitgeliefert werden). Listfiltert strikt nachtenant_slug(Akzeptanzkriterium 3).Update/Deletesind streng auftenant_slug+idbeschränkt.- Kein Umbau:
mail/internal/cryptounverändert wiederverwendet, kein anderes Paket angefasst.
Prüfungen
| # | Prüfung | Ergebnis |
|---|---|---|
| 1 | Test: zwei Mandanten mit je mehreren Postfächern sehen ausschließlich eigene Postfächer | bestanden – TestList_TwoTenantsWithMultipleMailboxesSeeOnlyOwn: Mandant A mit 2, Mandant B mit 1 Postfach — jeweils real nur die eigenen sichtbar |
| 2 | Test: Löschen eines Postfachs beeinträchtigt andere Postfächer desselben Mandanten nicht | bestanden – TestDelete_DoesNotAffectSiblingMailboxes: Postfach „eins" real gelöscht, Postfach „zwei" bleibt real vollständig funktionsfähig (Zugangsdaten weiterhin real entschlüsselbar) |
| 3 | Konfigurationsänderung an einem Postfach wirkt nicht auf andere | bestanden – TestUpdate_ConfigChangeDoesNotAffectOtherMailboxes: Änderung an Postfach „eins" (Host/Intervall) real übernommen, Postfach „zwei" real unverändert |
Build/Test-Ergebnis (192.168.1.131)
go build ./... -> clean
go vet ./... -> clean
golangci-lint run ./... -> 0 issues
TEST_TENANT_DSN=... go test ./internal/mailboxconfig/... -v -timeout 60s -> 3/3 bestanden
TEST_TENANT_DSN=... TEST_MANTICORE_URL=... go test ./... -p 1
-> alle 22 Pakete bestanden, keine Regression
Gesamtergebnis
Bestanden. Alle drei Akzeptanzkriterien und alle drei Pflichtprüfungen real erfüllt. Entsperrt ARC-09, trägt zu QA-02 bei — QA-02 bleibt weiterhin blockiert, bis dessen übrige Abhängigkeiten (ING-07, ING-08, ING-10) fertig sind.