57 🔄 Sincronización de Permisos a cada Rol: Lógica de Guardado con sync() en Spatie | Laravel 12

Duración: 13 min
Módulo: ⚙️ Gestión de Órdenes, Perfiles y Características Avanzadas 43-61 Lección 15 de 19

¡Contenido Exclusivo!

Adquiere este curso para tener acceso inmediato a esta y a **todas las lecciones Premium**.

Inscribirse Ahora por $10.00 Acceso instantáneo de por vida y código fuente incluido.

Descripción

Lección 57: 🔄 Sincronización de Permisos a cada Rol | Lógica de Guardado y Restricción de Acceso con Spatie

Esta lección culmina la implementación del módulo de roles y permisos, proporcionando la funcionalidad de guardado para la asignación de permisos y aplicando finalmente las restricciones de acceso a las rutas administrativas.

1. 💾 Lógica de Sincronización de Permisos (Update)

Se implementa la funcionalidad para guardar la selección de permisos a un rol específico:

  • Ruta de Actualización 🛣️: Se utiliza la ruta update-permisos con el método PUT para procesar el formulario de asignación [01:12].
  • Estructura del Formulario 📝:
    • La vista de permisos se envuelve en un formulario [01:32].
    • Los permisos seleccionados se envían como un array de IDs al controlador, gracias a la convención name="permisos[]" en las casillas de verificación [02:44].
  • Función del Controlador:
    • El método update-permisos recibe el ID del rol y el array de permisos.
    • Sincronización sync() 🔄: Se utiliza el método sync($permisos) de Spatie sobre el objeto Rol, el cual se encarga de:
      • Desvincular cualquier permiso existente que haya sido desmarcado.
      • Vincular los nuevos permisos marcados.
      • Mantener los permisos marcados sin cambios, asegurando que solo el conjunto de IDs recibidos esté asignado al rol [06:02].
  • Prueba Exitosa 🎉: Se demuestra la asignación selectiva de permisos a un rol de prueba ("Operador"), y la base de datos registra correctamente las nuevas relaciones [06:54].

2. 🚫 Restricción de Acceso a Rutas Críticas

El objetivo final de seguridad se alcanza aplicando los permisos definidos a las rutas de Laravel:

  • Uso de Middleware can 🛡️: En el archivo de rutas (web.php), se extiende el middleware de autenticación con el middleware can proporcionado por Spatie [10:10].
  • Sintaxis de Restricción: Se utiliza la sintaxis middleware('can:nombre_del_permiso') para especificar que solo los usuarios con el permiso listado podrán acceder a esa ruta [10:25].
    • Ejemplo 1 (Dashboard) 🚪: La ruta /admin se restringe al permiso ver dashboard del admin [09:50].
    • Prueba de Cliente ❌: Al intentar acceder a /admin con un usuario que tiene el rol Cliente (sin el permiso), el sistema devuelve un Error 403 (Acción No Autorizada), confirmando que la seguridad funciona correctamente [11:09].
  • Implementación Completa: Se establece que cada ruta administrativa deberá ser protegida individualmente con su correspondiente permiso para garantizar una seguridad granular en todo el sistema [11:43].