63 Sistema de Roles y Permisos en Laravel Control de Acceso con Spatie Permission 🔐👥 Sis Farmacia

Duración: 12 min
Módulo: Ultimos ajustes del sistema Lección 2 de 7

Descripción

🚀 Lección 63: Sistema de Roles y Permisos en Laravel: Control de Acceso con Spatie Permission

En este capítulo sentamos las bases de la ciberseguridad avanzada y el Control de Acceso Basado en Roles (RBAC) en nuestro Sistema para Farmacia. Integramos y configuramos el paquete profesional spatie/laravel-permission, estructurando una arquitectura que restringe las acciones del backend a nivel de ruta mediante la inyección de middleware granular.

🎯 El Objetivo Central

Asociar a nivel de rutas (routes/web.php) un permiso específico para cada acción del controlador utilizando el middleware can, y programar un RoleSeeder para poblar la base de datos con los permisos iniciales y sincronizarlos con los perfiles del sistema.

🛠️ 1. Arquitectura de Rutas Granulares (Evitando el Route::resource)

Para lograr que el sistema sea extremadamente seguro, aplicamos una regla de diseño estricta: declarar cada ruta de forma independiente.

  • El Problema del Resource: Un Route::resource genera permisos globales (ej. todo el bloque de clientes).
  • Nuestra Solución (Control Quirúrgico): Al mapear cada verbo y acción por separado (ej. el módulo de clientes), podemos adjuntar el intermediario de Spatie (->middleware('can:nombre_permiso')) para segmentar los privilegios:
    • Route::get('/clientes') ➡️ middleware('can:ver clientes')
    • Route::post('/clientes/guardar') ➡️ middleware('can:guardar cliente')
    • Route::put('/clientes/editar') ➡️ middleware('can:actualizar cliente')
    • Route::delete('/clientes/eliminar') ➡️ middleware('can:eliminar cliente')

Esto garantiza que un rol limitado (como un Empleado/Cajero) pueda estar autorizado únicamente para ver o buscar, manteniendo bloqueadas las capacidades de alteración o borrado de datos.

🗄️ 2. El Ecosistema de Tablas de Spatie

Al ejecutar las migraciones del paquete, la base de datos incorpora tablas relacionales estructuradas para gobernar los accesos:

  • permissions: Almacena el listado de cadenas de texto únicas que representan cada acción (el sistema ya cuenta con 138 permisos indexados, desde ver dashboard hasta imprimir ticket de venta).
  • roles: Contiene los perfiles del sistema (Superadministrador, Administrador, Empleado, etc.).
  • roll_has_permissions: Tabla pivote intermedia que conecta los IDs de los roles con los IDs de los permisos (ej. mapear que el Role ID: 5 [Empleado] tenga acceso exclusivo al Permission ID de ver formulario crear ventas).

🌾 3. Automatización con RoleSeeder y Reseteo del Sistema

Programamos un seeder maestro para automatizar la creación y el entrelazado de los 138 permisos con el perfil de Superadministrador (quien hereda todas las facultades por defecto) y perfiles operativos:

  • Para consolidar esta nueva capa estructural en la base de datos, ejecutamos un refresco total del sistema mediante php artisan migrate:fresh --seed. Aunque esto limpia las tablas operacionales, deja el core del software perfectamente configurado, libre de errores de sintaxis y listo para evaluar las restricciones.

Al finalizar este capítulo, los estudiantes dominarán la implementación del middleware can de Laravel, la gestión de tablas pivote de Spatie y la planeación de un sistema de permisos granular y escalable. ¡En la próxima lección desarrollaremos la interfaz gráfica para gestionar y sincronizar estos permisos de forma interactiva desde el panel administrativo! ¡Nos vemos en el siguiente tutorial!