63 Sistema de Roles y Permisos en Laravel Control de Acceso con Spatie Permission 🔐👥 Sis Farmacia
Duración: 12 minDescripció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!
Lecciones
Apoya este proyecto
Si te gusta nuestro contenido, ¡apóyanos con una donación!
Donar por Airtm Donar por Binance¡Gracias por tu apoyo! ❤️