78 Mostrar el Menú según los Roles y Permisos en Sistema con LARAVEL(PHP-MySql) FullStack

Duración: 7 min
Módulo: 🔑 Seguridad, Roles y Permisos Lección 8 de 15

Descripción

🧭🛑 Lección 78: Restricción del Menú de Navegación (Sidebar) por Roles

Esta lección se enfoca en el uso del paquete Spatie para controlar la visibilidad de los elementos del menú lateral (sidebar), asegurando que cada usuario solo vea las opciones que le corresponden según su rol.

1. Aplicación de la Directiva @can en el Menú

Para ocultar o mostrar los enlaces en la barra lateral, se utiliza la directiva de Blade @can (@can('nombre-del-permiso')) directamente en el archivo del layout de administración. Esta directiva verifica el permiso del usuario autenticado antes de renderizar el elemento del menú [01:38].

  • Lógica de Control: Cada elemento del menú es envuelto en un bloque @can que hace referencia al permiso de la ruta principal del módulo (ej. admin.usuarios.index).

2. Mapa de Visibilidad del Menú por Rol

La visibilidad del menú se configura en el layout según la lógica de gestión del sistema:

  • Módulos Exclusivos del Administrador:
    • Usuarios: 🛑 Solo visible para el rol admin [02:04].
    • Secretarias: 🛑 Solo visible para el rol admin [03:03].
  • Módulos de Gestión (Admin y Secretaria):
    • Pacientes: ✅ Visible para admin y secretaria [03:49].
    • Consultorios: ✅ Visible para admin y secretaria [04:15].
    • Doctores: ✅ Visible para admin y secretaria [04:37].
    • Horarios: ✅ Visible para admin y secretaria [05:17].
  • Roles Restringidos: Los roles doctor, paciente y usuario no visualizan actualmente ningún módulo de administración en el menú [05:54].

3. Falla de Seguridad Crítica e Inicios

Aunque el menú se oculta, se identifica una vulnerabilidad importante: un usuario sin permisos que conoce la URL de una ruta restringida (ej. /admin/usuarios) aún puede acceder a la vista.

  • Brecha de Seguridad: La protección del menú es solo una capa visual; se necesita una protección a nivel de servidor [06:59].
  • Próxima Lección: Para solucionar esto, el siguiente paso fundamental será proteger las rutas utilizando el middleware de Spatie.