75 Asignar Roles y Permisos en el Sistema Reserva de Citas Medicas con LARAVEL(PHP-MySql) FullStack

Duración: 15 min
Módulo: 🔑 Seguridad, Roles y Permisos Lección 5 de 15

Descripción

🔑👥 Lección 75: Asignación Final de Roles y Permisos en el Sistema

Esta lección culmina el proceso de configuración de roles y permisos con el paquete Spatie, realizando la asignación lógica de acceso a las rutas del sistema y corrigiendo errores cruciales en los seeders para un funcionamiento correcto.

1. Definición de Acceso por Módulo

Se completa la definición en el seeder de qué roles tienen acceso a cada grupo de rutas (permisos), utilizando el método syncPermissions para asignar roles a cada permiso creado [05:58].

  • Módulo Usuarios (CRUD): 🛑 Acceso restringido solo al rol admin [01:29].
  • Módulo Secretarias (CRUD): 🛑 Acceso restringido solo al rol admin [02:40].
  • Módulo Pacientes (CRUD): ✅ Acceso permitido para admin y secretaria [02:57].
  • Módulos Consultorios, Doctores y Horarios (CRUD): ✅ Acceso permitido para admin y secretaria [00:03:35 - 00:04:41].

2. Asignación de Roles a Usuarios Iniciales

Se asignan los roles definidos a los usuarios de prueba creados en el seeder utilizando el método assignRole [05:55]:

  • Los cinco usuarios de prueba iniciales reciben los roles admin, secretaria, doctor, paciente y usuario respectivamente [06:08].
  • Los 200 usuarios generados por el Factory (para simular pacientes) reciben automáticamente el rol paciente [08:13].

3. Solución de Errores Críticos (Debugging) 🐛

La ejecución de php artisan migrate:fresh --seed reveló errores que se corrigieron para asegurar el funcionamiento del sistema de roles.

  • Problema de Orden en el Seeder: El sistema fallaba porque los usuarios intentaban asignarse un rol (ej. 'admin') antes de que ese rol existiera en la base de datos [09:44].
    • Solución: Se reordenó el seeder para que la Creación de Roles se ejecute antes de la Creación de Usuarios [10:07].
  • Problema con el Modelo Paciente: Se generaba un error al intentar asignar roles a los pacientes creados por el Factory [10:45].
    • Solución: Fue necesario añadir el trait HasRoles y declarar la variable protected $guard_name = 'web'; en el modelo Paciente.php para resolver la discrepancia del guard y permitir la correcta asignación de roles de Spatie [00:11:00 - 00:12:25].

Una vez corregidos, el sistema migra y siembra la base de datos con éxito, y la tabla de relaciones confirma que el rol admin posee todos los permisos, y la secretaria los permisos de gestión asignados [12:58].