security: audit-log for role changes and member removal in household #57

Open
opened 2026-04-10 18:25:43 +02:00 by marcel · 0 comments
Owner

Beschreibung

Rollenänderungen (planer → mitglied und umgekehrt) und das Entfernen von Haushaltsmitgliedern sind privilegierte Aktionen, die im admin_audit_log nachvollziehbar sein müssen.

Problem

Aktuell werden diese Aktionen nicht geloggt. Bei Disputes (z.B. "wer hat mich entfernt?") gibt es keinen Audit-Trail.

Lösung

Für beide Aktionen einen Eintrag in admin_audit_log schreiben:

Feld Wert
actor_id ID des Planers, der die Aktion ausführt
action MEMBER_REMOVED / ROLE_CHANGED
target_id ID des betroffenen Mitglieds
timestamp Zeitpunkt der Aktion
metadata z.B. { from: "planer", to: "mitglied" } bei Rollenänderung

Betroffene Endpoints

  • DELETE /v1/households/mine/members/{userId}
  • PATCH /v1/households/mine/members/{userId}

Akzeptanzkriterien

  • Rollenänderung schreibt Eintrag in admin_audit_log
  • Mitglied-Entfernen schreibt Eintrag in admin_audit_log
  • Idempotente PATCH-Aufrufe (keine Änderung) schreiben keinen Log-Eintrag
  • Integrations-Test verifiziert Audit-Log-Einträge für beide Aktionen

Kontext

Aufgedeckt in #48 (Backend + Security Review). Wurde bewusst aus dem Members-Ticket herausgezogen, um den Scope nicht zu sprengen.

## Beschreibung Rollenänderungen (`planer → mitglied` und umgekehrt) und das Entfernen von Haushaltsmitgliedern sind privilegierte Aktionen, die im `admin_audit_log` nachvollziehbar sein müssen. ## Problem Aktuell werden diese Aktionen nicht geloggt. Bei Disputes (z.B. "wer hat mich entfernt?") gibt es keinen Audit-Trail. ## Lösung Für beide Aktionen einen Eintrag in `admin_audit_log` schreiben: | Feld | Wert | |---|---| | `actor_id` | ID des Planers, der die Aktion ausführt | | `action` | `MEMBER_REMOVED` / `ROLE_CHANGED` | | `target_id` | ID des betroffenen Mitglieds | | `timestamp` | Zeitpunkt der Aktion | | `metadata` | z.B. `{ from: "planer", to: "mitglied" }` bei Rollenänderung | ## Betroffene Endpoints - `DELETE /v1/households/mine/members/{userId}` - `PATCH /v1/households/mine/members/{userId}` ## Akzeptanzkriterien - [ ] Rollenänderung schreibt Eintrag in `admin_audit_log` - [ ] Mitglied-Entfernen schreibt Eintrag in `admin_audit_log` - [ ] Idempotente PATCH-Aufrufe (keine Änderung) schreiben keinen Log-Eintrag - [ ] Integrations-Test verifiziert Audit-Log-Einträge für beide Aktionen ## Kontext Aufgedeckt in #48 (Backend + Security Review). Wurde bewusst aus dem Members-Ticket herausgezogen, um den Scope nicht zu sprengen.
Sign in to join this conversation.