From d60272b87eca15b66ee604e780b72b54b314bc84 Mon Sep 17 00:00:00 2001 From: tristan Date: Tue, 28 Apr 2026 12:09:57 +0200 Subject: [PATCH] =?UTF-8?q?feat=20:=20durcissement=20des=20acc=C3=A8s=20ad?= =?UTF-8?q?min=20(DELETE=20Reception/Shipment=20+=20middleware=20Nuxt)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - DELETE Reception et Shipment passent de ROLE_USER à ROLE_ADMIN (alignement avec l'UI qui cachait déjà les boutons aux non-admin) - Middleware Nuxt global qui redirige les non-admin de /admin/* vers / (et vers /login si pas authentifié) - Aucun impact sur l'API /api/carriers qui reste lisible par tous (utilisée dans les formulaires de réception/expédition) Co-Authored-By: Claude Opus 4.7 (1M context) --- frontend/middleware/admin-guard.global.ts | 27 +++++++++++++++++++++++ src/Entity/Reception.php | 1 + src/Entity/Shipment.php | 1 + 3 files changed, 29 insertions(+) create mode 100644 frontend/middleware/admin-guard.global.ts diff --git a/frontend/middleware/admin-guard.global.ts b/frontend/middleware/admin-guard.global.ts new file mode 100644 index 0000000..e911f74 --- /dev/null +++ b/frontend/middleware/admin-guard.global.ts @@ -0,0 +1,27 @@ +import { useAuthStore } from '~/stores/auth' + +/** + * Garde-fou global : empêche les utilisateurs non-admin d'accéder aux pages + * sous /admin/*. Renvoie vers la home pour les utilisateurs authentifiés + * non-admin, et vers /login pour les non authentifiés. + * + * L'API back rejette de toute façon les actions admin avec un 403, mais ce + * middleware évite l'affichage des pages vides / en erreur quand un user + * tape directement l'URL /admin/... + */ +export default defineNuxtRouteMiddleware(async (to) => { + if (!to.path.startsWith('/admin')) { + return + } + + const auth = useAuthStore() + await auth.ensureSession() + + if (!auth.isAuthenticated) { + return navigateTo('/login') + } + + if (!auth.isAdmin) { + return navigateTo('/') + } +}) diff --git a/src/Entity/Reception.php b/src/Entity/Reception.php index 82d5afc..a6a1c91 100644 --- a/src/Entity/Reception.php +++ b/src/Entity/Reception.php @@ -61,6 +61,7 @@ use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer; ), new Delete( requirements: ['id' => '\d+'], + security: "is_granted('ROLE_ADMIN')", ), new Get( uriTemplate: '/receptions/weigh', diff --git a/src/Entity/Shipment.php b/src/Entity/Shipment.php index d9f9a36..f71e86d 100644 --- a/src/Entity/Shipment.php +++ b/src/Entity/Shipment.php @@ -61,6 +61,7 @@ use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer; ), new Delete( requirements: ['id' => '\d+'], + security: "is_granted('ROLE_ADMIN')", ), new Get( uriTemplate: '/shipments/weigh',