feat : durcissement des accès admin (DELETE Reception/Shipment + middleware Nuxt)

- 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) <noreply@anthropic.com>
This commit is contained in:
2026-04-28 12:09:57 +02:00
parent d566e5d9f7
commit d60272b87e
3 changed files with 29 additions and 0 deletions

View File

@@ -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('/')
}
})

View File

@@ -61,6 +61,7 @@ use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
), ),
new Delete( new Delete(
requirements: ['id' => '\d+'], requirements: ['id' => '\d+'],
security: "is_granted('ROLE_ADMIN')",
), ),
new Get( new Get(
uriTemplate: '/receptions/weigh', uriTemplate: '/receptions/weigh',

View File

@@ -61,6 +61,7 @@ use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;
), ),
new Delete( new Delete(
requirements: ['id' => '\d+'], requirements: ['id' => '\d+'],
security: "is_granted('ROLE_ADMIN')",
), ),
new Get( new Get(
uriTemplate: '/shipments/weigh', uriTemplate: '/shipments/weigh',