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); // Roles router.get('/roles/list', authenticate, requirePermission('users:read'), userController.getRoles); router.post('/roles', authenticate, requirePermission('users:create'), userController.createRole); router.get('/roles/:id', authenticate, requirePermission('users:read'), userController.getRole); router.put('/roles/:id', authenticate, requirePermission('users:update'), userController.updateRole); router.delete('/roles/:id', authenticate, requirePermission('users:delete'), userController.deleteRole); // Permissions router.get('/permissions/list', authenticate, requirePermission('users:read'), userController.getPermissions); export default router;