65 Menú Dinámico con Permisos en Laravel Protección de Navegación con Spatie 🔐🧭 Sistema de Farmacia

Duración: 8 min
Módulo: Ultimos ajustes del sistema Lección 4 de 7

Descripción

🚀 Lección 65: Menú Dinámico con Permisos en Laravel: Protección de Navegación con Spatie

En este capítulo consolidamos visualmente el Sistema de Roles y Permisos. Llevamos el control de acceso al frontend de la aplicación utilizando las directivas nativas de Spatie dentro de las plantillas Blade. Logramos que la barra de navegación lateral (Sidebar) y los botones operativos de cada CRUD reaccionen dinámicamente y en tiempo real a los privilegios asignados a cada usuario.

🎯 El Objetivo Central

Condicionar la renderización de los componentes HTML del sistema (menús, submenús y botones de acción) mediante las directivas @can y @canany, validando su escalabilidad y comportamiento en vivo a través de un usuario con rol operativo.

🧭 1. Navegación Inteligente con @can y @canany

Dejamos atrás los menús estáticos y desprotegidos. Implementamos un sistema de visibilidad condicional en la plantilla principal:

  • Directiva @can: Envolvemos los accesos directos de los módulos para que solo los usuarios autorizados los visualicen. Si a un empleado se le desmarca el permiso ver perfil, el ítem desaparece por completo de su panel de forma inmediata [03:15].
  • Directiva @canany: Utilizada estratégicamente en menús desplegables con subítems. Si un rol intermedio tiene acceso al menos a uno de los submódulos de un bloque (ej. ver clientes pero no proveedores), el menú padre se mantendrá visible para no romper la navegación, pero solo renderizará las opciones autorizadas.

🎛️ 2. Restricción de Botones en los CRUDs (Seguridad a Nivel de UI)

Llevamos la protección al interior de las interfaces de gestión (como Sucursales y Clientes). Ahora, el sistema oculta o muestra los botones de acción según la matriz de permisos [01:51]:

  • Crear / Nueva sucursal: Envuelto en @can('guardar sucursal'). Si no está asignado, el botón desaparece, impidiendo abrir el formulario modal [03:42].
  • Editar y Eliminar: Condicionados con sus respectivos permisos. Validamos en vivo que al activar el permiso de edición, el botón azul de lápiz aparece al instante; al activar el de eliminación, el botón rojo de papelera se renderiza y permite ejecutar el borrado lógico con confirmación de manera exitosa [04:02, 05:56].

📈 3. Escalabilidad Total: Creación de Nuevos Roles en Caliente

Demostramos que la arquitectura es 100% flexible y adaptable a las necesidades de crecimiento de cualquier farmacia:

  • Creamos en vivo un nuevo rol denominado "Facturador" [06:32]. Al ser una entidad nueva en la tabla roles, nace completamente limpia, con cero permisos asignados. El administrador puede ir marcando interactivamente los checkboxes requeridos (ej. hacer movimientos, arqueo de cajas, ver inventario) para moldear el perfil del puesto de trabajo sin tocar una sola línea de código fuente.

Al finalizar este capítulo, los estudiantes dominarán la maquetación de interfaces adaptativas con Spatie, el control de componentes UI condicionales en Blade y la administración de seguridad interactiva en caliente. ¡Un sistema robusto, elegante y totalmente listo para producción!