92 — Audit-Log
Aktualisiert am 1. Juni 2026
92 — Audit-Log
Jede sicherheitsrelevante oder geschäftskritische Aktion wird im Audit-Log dokumentiert. Wer hat wann was gemacht — vollständig nachvollziehbar.
Wer kann was sehen?
| Rolle | Sicht |
|---|---|
| Plattform-Admin | Alle Tenants, alle Einträge |
| Tenant-Owner | Nur eigener Tenant |
| Reguläre Tenant-Admins | Kein Zugriff (Pflichten-Trennung) |
| Partner | Kein Zugriff |
Was wird protokolliert?
Auth-Aktionen
- Login-Success mit Email + IP.
- Login-Failure mit attempted-Email + IP + Grund.
- Logout (implizit über JWT-Expiry).
- 2FA-Setup/-Aktivierung/-Deaktivierung.
- Password-Reset-Anforderung + Durchführung.
Geschäftliche Aktionen
payout.approvedmit Payout-Nummer, Partner, Betrag.payout.paidmit Bank-Referenz.payout.stripe_transfermit Stripe-Transfer-ID + Destination-Account.payout.cancelledmit Grund.transaction.approved/rejected.customer.assigned/unassigned.partner.created/status_changed/anonymized.
Plattform-weite Aktionen
tenant.created/suspended/reactivated.api_key.created/revoked.webhook_endpoint.created/deactivated(Auto-Deactivate nach 10 Fails).
Pro Eintrag wird gespeichert
| Feld | Inhalt |
|---|---|
| Zeitpunkt | UTC-Timestamp |
| Actor-Type | platform_user, tenant_user, partner, system |
| Actor-ID | UUID |
| Actor-Label | Display-Name (auch nach User-Löschung lesbar) |
| Action | Kanonischer Action-Name (payout.approved, …) |
| Entity-Type | Welche Entity wurde geändert |
| Entity-ID | Welche konkrete Instance |
| Changes (JSON) | Diff {field: [old, new]} |
| Metadata (JSON) | Action-spezifische Zusatzdaten |
| IP-Adresse | Request-IP |
| User-Agent | Browser/Tool |
Wo finde ich das Log?
Tenant-Admin
Admin → „Audit-Log" in der Sidebar (nur für ROLE_OWNER).
Filter:
- Aktion (Dropdown aller registrierten Actions).
- Actor-Type.
- Entity-Type.
- Zeitraum.
Detail: Klick auf Eintrag → Expand/Collapse mit JSON-Diff.
Plattform-Admin
Superadmin → „Audit-Log" mit zusätzlichem Tenant-Filter.
Actor-Type-Erkennung
PartnerDesk erkennt automatisch, wer eine Aktion ausgelöst hat:
- PlatformUser →
actor_type: 'platform_user'. - TenantUser →
actor_type: 'tenant_user'. - Partner →
actor_type: 'partner'. - Cron / System-Trigger →
actor_type: 'system'.
Badges sind farbcodiert für schnelle Orientierung.
Export
Audit-Log als CSV exportierbar:
GET /api/admin/audit-log/export.csv
Mit gleichen Filter-Params wie die List-View. UTF-8 BOM für Excel-Kompatibilität. Iterable-Query für Memory-Effizienz bei großen Logs.
Retention
Audit-Einträge werden nach 18 Monaten automatisch gelöscht (täglicher Cron). Konfigurierbar über Env-Variable AUDIT_RETENTION_DAYS.
Compliance-Hinweis: 18 Monate sind eine pragmatische Wahl. Für längere Aufbewahrung (z. B. Compliance-spezifische Anforderungen) → Plattform-Owner kontaktieren.
Fehler-Tolerance
Audit-Logging ist try-umschlossen — eine fehlgeschlagene Logging-Operation (z. B. DB-Connection-Loss) bricht niemals den Main-Flow ab. Im Notfall fehlt eine Audit-Zeile, aber der Business-Workflow läuft weiter.
Verwandte Kapitel
- 03 — Rollen & Berechtigungen
- 90 — 2FA
- 93 — DSGVO (Audit + Retention)
- 110 — Plattform-Admin
Technische Tiefen-Doku: ../025-webhook-audit-log.md, ../041-security-headers-login-audit.md, ../164-v1-block-2-audit-csv.md