Pentester meldete 403 auf POST/PUT/DELETE /api/contract-categories/* für Admin trotz vorhandener contract-categories:*-Perms. Vermutete Regression aus R110, war aber schon seit dem allerersten Commit so: Route verlangte developer:access, während der Permission-Seed den Admins contract-categories:* gibt. Fix: Route auf contract-categories:create/update/delete umgestellt, konsistent mit den sechs Peer-Katalog-Endpunkten (platforms/ tariffs/cancellation-periods/… nutzen alle ressourcen-spezifische Perms). Kommentar aktualisiert. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
24 lines
1.4 KiB
TypeScript
24 lines
1.4 KiB
TypeScript
import { Router } from 'express';
|
||
import * as contractCategoryController from '../controllers/contractCategory.controller.js';
|
||
import { authenticate, requirePermission } from '../middleware/auth.js';
|
||
|
||
const router = Router();
|
||
|
||
// Lesen für alle authentifizierten Benutzer
|
||
router.get('/', authenticate, contractCategoryController.getContractCategories);
|
||
router.get('/:id', authenticate, contractCategoryController.getContractCategory);
|
||
|
||
// Ändern/Löschen: `contract-categories:*` – wird per seed.ts an Admin-
|
||
// Rollen vergeben. Vorher stand hier `developer:access` mit dem
|
||
// Kommentar „Vertragstypen erfordern Formular-Anpassungen". Historische
|
||
// Design-Restriktion, die aber im Widerspruch zum Permission-Seed stand
|
||
// (Admin hatte `contract-categories:*` ohne Nutzen). Pentester R111 hat
|
||
// die Diskrepanz aufgedeckt; angeglichen an die sechs Peer-Endpunkte
|
||
// (platforms/tariffs/cancellation-periods/… nutzen alle ressourcen-
|
||
// spezifische Perms statt developer:access).
|
||
router.post('/', authenticate, requirePermission('contract-categories:create'), contractCategoryController.createContractCategory);
|
||
router.put('/:id', authenticate, requirePermission('contract-categories:update'), contractCategoryController.updateContractCategory);
|
||
router.delete('/:id', authenticate, requirePermission('contract-categories:delete'), contractCategoryController.deleteContractCategory);
|
||
|
||
export default router;
|