19 Vinculación Automática de Peciente y Asignación de Roles en el Sistema de Odontología Clinica
Duración: 14 minDescripción
🎓 Lección #19: Vinculación Automática de Paciente y Asignación de Roles en Laravel
Objetivo General: Aprender a implementar la vinculación automática entre el registro vía OAuth (Laravel Socialite) y el modelo de Pacientes, asignando el rol correspondiente (paciente) y optimizando las búsquedas mediante relaciones en Eloquent.
🚀 Pasos Clave con Timestamps
- ⏱️ 00:00 📌 Contexto del Módulo de Citas: Explicación del flujo de autenticación mediante Laravel Socialite para la reserva de citas de pacientes con un solo clic.
- ⏱️ 02:39 ⚙️ Creación del Método vincularPaciente(): Implementación del método en el controlador para verificar si el usuario tiene una entidad paciente asociada y poblar los campos no nulos requeridos con datos genéricos por defecto.
- ⏱️ 05:46 🔑 Asignación del Rol de Paciente: Verificación con Spatie Roles (hasRole) para asignar el rol de paciente de forma segura evitando duplicaciones o reescrituras innecesarias.
- ⏱️ 06:46 🧪 Prueba de Autenticación con Google: Demostración práctica tras ejecutar migrate:fresh, logrando la creación automática del usuario, la entrada en la tabla pacientes y la asignación en model_has_roles.
- ⏱️ 10:18 🖥️ Actualización de la Vista Index: Inclusión de la columna del correo electrónico ($paciente->user->email) en la tabla de listado de pacientes.
- ⏱️ 11:20 🔍 Optimización del Buscador en Eloquent: Modificación de la consulta en PacienteController utilizando orWhereHas para permitir filtrar pacientes por el correo electrónico de la relación User.
🛠️ Comandos y Rutas Principales
| Tipo | Comando / Ruta | Descripción |
|---|---|---|
| 💻 Terminal (Artisan) | php artisan migrate:fresh --seed | Limpia la base de datos y ejecuta los seeders para probar el flujo desde cero. |
| 🌐 Ruta HTTP | GET /auth/{provider}/callback | Callback de Socialite que procesa el login social e invoca a vincularPaciente(). |
| 🌐 Ruta HTTP | GET /pacientes | Lista de pacientes con la nueva columna de correo electrónico y soporte de búsqueda. |
🔒 Buenas Prácticas y Seguridad
- 🛡️ Validación de Roles Existentes: Utilizar comprobaciones previas como $user->hasRole('paciente') antes de asignar roles para evitar excepciones de base de datos o duplicaciones de permisos.
- 🆔 Generación de Identificadores Únicos Temporales: Al registrar usuarios vía Socialite sin DNI o número de documento, autocompletar con el user_id formateado para garantizar la unicidad del índice en la base de datos sin romper las restricciones NOT NULL.
- 🔎 Filtros de Búsqueda mediante Relaciones Eloquent: Encapsular la búsqueda en subconsultas mediante whereHas u orWhereHas para mantener la integridad de las cláusulas WHERE y evitar fuga de resultados entre tablas relacionadas.
- 🔐 Control de Acceso basado en Permisos (RBAC): Garantizar que la interfaz del paciente limite las vistas administrativas (como la gestión de roles o ajustes del sistema) mediante middleware y directivas @can.