M8: Datenexport pro Mandant

Neue Seite datenexport.php (Owner/Admin) laedt einen vollstaendigen
JSON-Export des eigenen Mandanten herunter: Stammdaten, Einstellungen,
Teilnehmer, Mitglieder mit Rolle, alle Ledger-Buchungen, Hinweise,
CSV-Importe, Mail-Versandlog und Admin-Protokoll. Passwort- und
Token-Hashes werden bewusst nicht exportiert; der Export selbst wird im
Audit-Log protokolliert. Link von konto.php aus.

Live getestet: eigens angelegter Test-Mandant, Export heruntergeladen,
Header und JSON-Struktur geprueft, keine Passwoerter im Export gefunden.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-15 20:10:30 +02:00
co-authored by Claude Sonnet 5
parent 3917a11db0
commit f3045dbab9
6 changed files with 175 additions and 3 deletions
+26 -2
View File
@@ -124,18 +124,42 @@ erwarteten Rollenliste übereinstimmt.
Ergebnis: grün mit 55 Assertions (5 Rollen × 11 Seiten). Räumt die
Testdaten am Ende selbst auf.
## Datenexport pro Mandant
Umgesetzte Dateien:
```text
app/data-export.php
datenexport.php
konto.php
scripts/http-smoke.php
```
- Neue Seite `datenexport.php` (Owner/Admin, echte SaaS-Session nötig)
lädt einen vollständigen JSON-Export des eigenen Mandanten herunter:
Tenant-Stammdaten, Einstellungen, Teilnehmer, Mitglieder mit Rolle,
alle Ledger-Buchungen, Hinweise, CSV-Importe (Batches und Zeilen),
Mail-Versandlog und Admin-Protokoll.
- Passwort-Hashes und Token-Hashes werden bewusst nicht exportiert.
- Der Export selbst wird im Audit-Log protokolliert
(`tenant_data.exported`).
- Link von `konto.php` aus neben „Mandant-Einstellungen".
- Live getestet: eigens angelegter Test-Mandant, Export heruntergeladen,
Header (`Content-Type`, `Content-Disposition`) und JSON-Struktur
geprüft, verifiziert dass keine Passwörter enthalten sind. Testdaten
anschließend entfernt.
## Prüfstatus
- Golden Master: grün mit 104 Assertions.
- M4 Ledger-Migration: grün mit 73 Assertions.
- M3 Settings-Flow: grün mit 13 Assertions.
- HTTP-Smoke: grün mit 26 geprüften Seiten.
- HTTP-Smoke: grün mit 27 geprüften Seiten.
- M8 Mandanten-Isolation: grün mit 10 Assertions.
- M8 Rollenmatrix: grün mit 55 Assertions.
## Noch offen in M8
- Content-Security-Policy (braucht Template-Bereinigung der Inline-Styles).
- Datenexport pro Mandant.
- Lösch-/Anonymisierungsprozess für Teilnehmer und Kunden.
- Backup-/Restore-Prozess und Monitoring/Fehlerlogging dokumentieren.