19 Vinculación Automática de Peciente y Asignación de Roles en el Sistema de Odontología Clinica

Duración: 14 min
Módulo: Autenticación Social & Registro de Pacientes Lección 3 de 4

Descripció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

TipoComando / RutaDescripción
💻 Terminal (Artisan)php artisan migrate:fresh --seedLimpia la base de datos y ejecuta los seeders para probar el flujo desde cero.
🌐 Ruta HTTPGET /auth/{provider}/callbackCallback de Socialite que procesa el login social e invoca a vincularPaciente().
🌐 Ruta HTTPGET /pacientesLista de pacientes con la nueva columna de correo electrónico y soporte de búsqueda.

🔒 Buenas Prácticas y Seguridad

  1. 🛡️ 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.
  2. 🆔 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.
  3. 🔎 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.
  4. 🔐 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.