diff --git a/README.md b/README.md index 355f755..5d2dff6 100644 --- a/README.md +++ b/README.md @@ -40,4 +40,4 @@ npm run start - OpenAPI: `openapi.yaml` (Spiegel: `docs/openapi.yaml`) - Versioning/Deprecation Policy: `docs/api-versioning.md` - +- Rollen- und Rechtekonzept: `docs/roles-and-permissions.md` diff --git a/docs/roles-and-permissions.md b/docs/roles-and-permissions.md new file mode 100644 index 0000000..fd25e3c --- /dev/null +++ b/docs/roles-and-permissions.md @@ -0,0 +1,75 @@ +# Rollen- und Rechtekonzept + +## Rollen + +- `user`: Standardrolle fuer alle registrierten Nutzer +- `moderator`: Operative Moderation (Disputes, Abuse-Faelle) +- `admin`: Systemadministration und Policy-Overrides + +## Prinzipien + +- **Least Privilege**: Jede Rolle bekommt nur notwendige Rechte. +- **Default Deny**: Nicht explizit erlaubte Aktionen sind verboten. +- **Audit First**: Sensible Aktionen werden protokolliert. + +## Berechtigungen nach Bereich + +### Auth & Profil + +- `user`: eigenes Profil lesen/aendern +- `moderator`: keine Profilaenderung fuer fremde User +- `admin`: administrative Sperrung/Entsperrung von Accounts + +### Requests / Offers / Deals + +- `user`: eigene Requests/Offers erstellen, eigene Deals einsehen +- `moderator`: Read-Only auf alle Deals bei gemeldeten Vorfaellen +- `admin`: Read-Only auf alle Deals, Ausnahmeeingriffe nur dokumentiert + +### Contacts / Address / PII + +- `user`: nur eigene PII und freigegebene Deal-Kontaktdaten +- `moderator`: keine Vollansicht von PII, nur minimierte Fallsicht +- `admin`: Zugriff nur fuer Betrieb/Sicherheit, jede Einsicht auditpflichtig + +### Disputes + +- `user`: Dispute erstellen, Evidenz nachreichen +- `moderator`: Statuswechsel (`open/evidence/mediation/resolved`), Entscheidungsvorschlag +- `admin`: Finalentscheid/Override mit Pflichtbegruendung + +## Rollenmatrix (Kurzform) + +| Aktion | user | moderator | admin | +|---|---:|---:|---:| +| Request erstellen | ✅ | ❌ | ❌ | +| Offer abgeben | ✅ | ❌ | ❌ | +| Eigenes Profil aendern | ✅ | ✅ (eigenes) | ✅ (eigenes) | +| Dispute oeffnen | ✅ | ✅ | ✅ | +| Dispute-Status aendern | ❌ | ✅ | ✅ | +| Dispute final entscheiden | ❌ | ⚠️ (nur Vorschlag) | ✅ | +| User sperren | ❌ | ❌ | ✅ | + +## Technische Durchsetzung + +- JWT enthaelt `role` Claim (`user|moderator|admin`) +- Serverseitige Middleware `requireRole([...])` fuer Endpunkte +- Sensible Aktionen schreiben Audit-Eintrag mit: + - actorUserId + - action + - targetType/targetId + - reason + - timestamp + +## Audit-Events (Mindeststandard) + +- `USER_SUSPEND`, `USER_UNSUSPEND` +- `DISPUTE_STATUS_CHANGE`, `DISPUTE_DECISION` +- `PII_ACCESS_GRANTED`, `PII_ACCESS_VIEWED` + +## Definition of Done + +- Rollenmodell im Repo dokumentiert +- Rollen-Claims in API-Security-Konzept referenziert +- Role-Checks fuer neue Endpunkte verpflichtend +- Audit-Events fuer Admin/Moderation spezifiziert