Some checks are pending
Docker Test / test (push) Waiting to run
This commit updates the RBAC documentation to include information about integration tests and adds comprehensive tests for the role middleware.
3.7 KiB
3.7 KiB
Rollen- und Rechtekonzept
Rollen
user: Standardrolle fuer alle registrierten Nutzermoderator: 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/aendernmoderator: keine Profilaenderung fuer fremde Useradmin: administrative Sperrung/Entsperrung von Accounts
Requests / Offers / Deals
user: eigene Requests/Offers erstellen, eigene Deals einsehenmoderator: Read-Only auf alle Deals bei gemeldeten Vorfaellenadmin: Read-Only auf alle Deals, Ausnahmeeingriffe nur dokumentiert
Contacts / Address / PII
user: nur eigene PII und freigegebene Deal-Kontaktdatenmoderator: keine Vollansicht von PII, nur minimierte Fallsichtadmin: Zugriff nur fuer Betrieb/Sicherheit, jede Einsicht auditpflichtig
Disputes
user: Dispute erstellen, Evidenz nachreichenmoderator: Statuswechsel (open/evidence/mediation/resolved), Entscheidungsvorschlagadmin: 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
roleClaim (user|moderator|admin) - Serverseitige Middleware
requireRole([...])fuer Endpunkte (implementiert inbackend/middleware/role.middleware.js) - Sensible Aktionen schreiben Audit-Eintrag mit:
- actorUserId
- action
- targetType/targetId
- reason
- timestamp
Audit-Events (Mindeststandard)
USER_SUSPEND,USER_UNSUSPENDDISPUTE_STATUS_CHANGE,DISPUTE_DECISIONPII_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
Implementierung
Die Rollen werden in der Datenbank als role-Feld im users-Table gespeichert. Die Middleware requireRole prüft, ob der eingeloggte Benutzer die benötigte Rolle besitzt.
Beispiel für eine geschützte Route:
const express = require('express');
const router = express.Router();
const { requireRole } = require('../middleware/role.middleware');
// Nur Admins dürfen diese Route aufrufen
router.delete('/users/:userId', requireRole(['admin']), async (req, res) => {
// ...
});
Beispiel für eine Middleware zur Rollenprüfung:
// backend/middleware/role.middleware.js
const requireRole = (allowedRoles) => {
return (req, res, next) => {
const userRole = req.user.role; // aus JWT
if (!allowedRoles.includes(userRole)) {
return res.status(403).json({ error: 'Forbidden' });
}
next();
};
};
module.exports = { requireRole };
Integrationstests
Um sicherzustellen, dass die Rollenkontrolle korrekt funktioniert, wurden Integrationstests hinzugefügt. Diese Tests überprüfen:
- Ob nicht-authentifizierte Nutzer auf geschützte Endpunkte keinen Zugriff erhalten
- Ob Nutzer mit falscher Rolle auf geschützte Endpunkte keinen Zugriff erhalten
- Ob Nutzer mit korrekter Rolle auf geschützte Endpunkte Zugriff erhalten
Die Tests befinden sich in test/roles.test.js.