Files
opencrm/backend/src/routes/contractCategory.routes.ts
T
duffyduckandClaude Opus 4.7 217aa82b2a Pentest R111: contract-categories – Permission-String angeglichen
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>
2026-07-11 16:35:47 +02:00

24 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;