From a544818b5da62542f065c89d746a5985c1aebfe4 Mon Sep 17 00:00:00 2001 From: javier Date: Wed, 8 Jul 2026 11:16:44 +0200 Subject: [PATCH] fix(perms): 'manage all' concede todo (igual que Gate::before del backend) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Los botones (nueva incidencia, nueva inspección, editar, subir foto) se ocultaban a usuarios Admin: el backend los autoriza vía el bypass de super-admin (Gate::before → 'manage all'), pero el rol Admin no tiene los permisos granulares (create issues, create inspections, edit issues, upload media, view issues) asignados explícitamente, así que /me no los devolvía. hasPermission ahora trata 'manage all' como comodín. Co-Authored-By: Claude Sonnet 4.6 --- src/auth/session.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/auth/session.tsx b/src/auth/session.tsx index 657819c..e979df6 100644 --- a/src/auth/session.tsx +++ b/src/auth/session.tsx @@ -136,6 +136,14 @@ export function useSession(): SessionState { return ctx; } +/** + * Comprueba un permiso Spatie. Replica el `Gate::before` del backend: quien + * tiene `manage all` (súper-admin) pasa todas las comprobaciones. Sin ese + * comodín, un usuario Admin no tendría los permisos granulares asignados + * explícitamente y la UI le ocultaría acciones que el servidor sí le permite. + */ export function hasPermission(user: User | null, permission: string): boolean { - return Boolean(user?.permissions?.includes(permission)); + const perms = user?.permissions; + if (!perms) return false; + return perms.includes('manage all') || perms.includes(permission); }