import { Router } from 'express'; import * as userController from '../controllers/user.controller.js'; import { authenticate, requirePermission } from '../middleware/auth.js'; import { staffPasswordReAuthLimiter } from '../middleware/rateLimit.js'; const router = Router(); // Users (Admin only) router.get('/', authenticate, requirePermission('users:read'), userController.getUsers); router.post('/', authenticate, requirePermission('users:create'), userController.createUser); router.get('/:id', authenticate, requirePermission('users:read'), userController.getUser); router.put('/:id', authenticate, requirePermission('users:update'), userController.updateUser); router.delete('/:id', authenticate, requirePermission('users:delete'), userController.deleteUser); // Passwort-Reset durch Admin – dedizierter Endpoint (Pentest Runde 12). // 47.3 verlangt Re-Auth (currentPassword), 48.3 wirft einen Rate-Limit // davor, damit ein gestohlener JWT das Admin-Passwort nicht brute-forcen kann. router.post('/:id/password', staffPasswordReAuthLimiter, authenticate, requirePermission('users:update'), userController.setUserPassword); // Rollen und Rechte. // // Die Schreibwege haengen an `roles:manage`, nicht mehr an `users:*`: // "Konten anlegen" und "festlegen, was ein Konto darf" sind zwei // verschiedene Befugnisse. Wer beides hatte, konnte sich eine Rolle mit // `developer:access` bauen und zuweisen - die Rollenverwaltung war damit // faktisch eine Rechteerhoehung mit Zwischenschritt. Die zweite Haelfte des // Riegels ist die Teilmengenregel in rechte.service.ts. // // Die LESEwege bleiben zusaetzlich mit `users:read` erreichbar: Das // Benutzerformular braucht die Rollenliste zum Zuweisen, ohne dass der // Bearbeiter Rollen pflegen koennen muss. `requirePermission` ist // ODER-verknuepft, das traegt ohne Zusatzcode. router.get('/roles/list', authenticate, requirePermission('roles:manage', 'users:read'), userController.getRoles); router.post('/roles', authenticate, requirePermission('roles:manage'), userController.createRole); router.get('/roles/:id', authenticate, requirePermission('roles:manage', 'users:read'), userController.getRole); router.put('/roles/:id', authenticate, requirePermission('roles:manage'), userController.updateRole); router.delete('/roles/:id', authenticate, requirePermission('roles:manage'), userController.deleteRole); // Permissions router.get('/permissions/list', authenticate, requirePermission('roles:manage', 'users:read'), userController.getPermissions); export default router;