79 Acceso No Autorizado con Roles y Permisos en Sistema con LARAVEL(PHP-MySql) FullStack
Duración: 14 minDescripción
🚫🔑 Lección 79: Proteger Rutas Críticas con el Middleware de Permisos
Esta lección aborda la vulnerabilidad de seguridad crítica identificada en lecciones anteriores: aunque el menú se oculte, un usuario sin permisos puede acceder a las páginas restringidas si escribe la URL directamente. La solución fundamental es aplicar el middleware de permisos directamente en las rutas del servidor.
1. La Vulnerabilidad de la Ruta 🚨
Se demostró que un usuario normal, que no tiene acceso a ningún módulo de administración en el menú, puede acceder al listado de usuarios (/admin/usuarios) con solo escribir la URL, lo que representa una falla grave de seguridad [01:00].
- El Problema: El control de acceso basado solo en la visibilidad del menú o widgets es insuficiente; se necesita una capa de protección a nivel de servidor.
2. Implementación del Middleware de Permisos
Para proteger cada ruta de forma efectiva, se utiliza el middleware provisto por el paquete Spatie en el archivo de rutas de Laravel (web.php).
- Sintaxis de Protección: En la definición de cada ruta, se añade un middleware específico.
- Midddleware: Se utiliza la sintaxis can:nombre-del-permiso [02:38].
Ejemplo de Uso: La ruta del listado de usuarios queda protegida de la siguiente manera:
PHP
Route::get('/usuarios', 'UserController@index') ->name('admin.usuarios.index') ->middleware('can:admin.usuarios.index');
- Resultado de la Restricción: Si un usuario (como el rol usuario) intenta acceder a una ruta protegida sin el permiso correspondiente, el sistema arroja un Error 403 (Esta acción no está autorizada) [03:09].
- Proceso de Aplicación: Se aplica el middleware de permisos a todas las rutas de los módulos de administración (Usuarios, Secretarias, Pacientes, Consultorios, Doctores y Horarios) para garantizar la seguridad total del backend [00:03:34 - 00:06:40].
3. Mejora en la Organización del Código (Seeding) 🗂️
Para evitar errores y agilizar el proceso de seeding durante el desarrollo, se refactoriza el código de creación de roles y usuarios.
- Creación de un RoleSeeder: Se mueve toda la lógica de creación de roles y permisos (que antes estaba en DatabaseSeeder) a un nuevo archivo llamado RoleSeeder.php [08:44].
- Llamada Simplificada: En el DatabaseSeeder.php principal, ahora solo se llama a la clase RoleSeeder para ejecutar la siembra de roles [10:45].
- Creación de Entidades de Prueba: Se añade código adicional al seeder para crear una entrada en la tabla secretarias y así enlazar correctamente a la secretaria de prueba con su respectivo user_id, solucionando el problema de datos que surgía al vaciar la base de datos con migrate:fresh [11:04].
Conclusión: Con la protección de rutas mediante middleware, el sistema queda seguro a nivel de servidor, ya que solo los roles con permisos explícitos pueden acceder a las URL sensibles.
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! ❤️