54 Permisos en las rutas y vistas en el curso de LARAVEL (PHP y MySql) FullStack

Duración: 15 min
Módulo: 👑 Roles, Permisos y Panel de Control Lección 3 de 4

Descripción

🔒 Lección 54: Permisos en las Rutas y Vistas (Autorización con Spatie)

Este capítulo es crucial ya que finaliza la configuración de roles y permisos (Spatie Laravel Permission) al implementar la lógica de autorización para restringir el acceso a rutas y elementos de la interfaz de usuario.

1. 📄 Asignación Final de Permisos y Roles

El instructor completa la configuración de los permisos antes de la implementación:

  • Permisos de Rutas Completados: Se revisa el archivo RoleSeeder para confirmar que se han creado todos los permisos basados en los nombres de las rutas web (admin.index, usuarios.create, etc.) y que estos permisos han sido sincronizados (syncRoles()) con los roles de Administrador y Usuario según su nivel de acceso [00:17].
  • Asignación a Usuarios de Prueba: Se asignan los roles a los usuarios de prueba creados en el DatabaseSeeder:
    • El primer usuario se asigna al rol administrador [02:07].
    • Los usuarios restantes se asignan al rol usuario [02:26].
  • Ejecución: Se ejecuta php artisan migrate:fresh --seed para actualizar la base de datos y aplicar los nuevos permisos y roles a todos los usuarios y rutas [02:44].

2. 📝 Restricción en la Interfaz (Vistas Blade)

El primer paso de la autorización es ocultar los elementos del menú y la interfaz que el usuario no debería ver:

  • Directiva @can: Se utiliza la directiva de Blade @can para controlar la visibilidad de los enlaces en el menú de navegación [07:37].
  • Ejemplo: Para el enlace "Usuarios", se envuelve con @can('usuarios.index') y @endcan. Esto asegura que el enlace solo será visible si el usuario autenticado tiene el permiso de acceder a la ruta nombrada como usuarios.index (es decir, solo para el administrador) [08:19].
  • Resultado: Al ingresar como usuario normal, el elemento "Usuarios" desaparece del menú lateral [08:29].

3. 🛑 Restricción en el Acceso a Rutas (Middleware)

La restricción en las vistas no es suficiente, ya que un usuario aún podría acceder a rutas sensibles escribiendo la URL directamente en el navegador. La solución es aplicar el middleware de permisos:

  • Problema: Aunque el menú esté oculto, un usuario normal puede acceder a una ruta de administrador como /admin/usuarios/create si conoce la URL [08:42].
  • Solución (Middleware): Se añade el middleware can de Spatie a las definiciones de rutas que deben ser protegidas. Este middleware utiliza el nombre de la ruta para verificar si el usuario autenticado tiene el permiso para acceder [10:59].
  • Sintaxis: Se añade el middleware a la definición de la ruta en routes/web.php usando la sintaxis middleware('can:nombre.de.la.ruta') [11:08].
  • Resultado: Al intentar acceder a una ruta sin permiso (como usuario normal), el sistema ahora devuelve una página de error de autorización ("Esta acción no está autorizada para este usuario") [11:29].

Verificación Final: Se demuestra que la lógica funciona correctamente:

  • El Administrador puede ver el menú "Usuarios" y navegar por las rutas administrativas [12:38].
  • El Usuario Normal no ve el menú y es bloqueado inmediatamente al intentar acceder a rutas administrativas [12:46].