36 🔑 Evitar Borrar Roles con Usuarios Asociados | Sistema de Parqueo Laravel 12 FullStack

Duración: 10 min
Módulo: 👤 Gestión de Perfil y Mantenimiento Lección 1 de 3

Descripción

36 🔑 Índice de Lección: Evitar Borrar Roles con Usuarios Asociados (Laravel 12 FullStack)

La lección 36 aborda un problema crítico de integridad de datos en el sistema: la posibilidad de eliminar un rol que tiene usuarios activos asociados. El objetivo es implementar una validación en el controlador que prevenga la eliminación y mantenga la estabilidad del sistema.

1. Detección del Problema de Integridad

Se demuestra el riesgo que implica permitir la eliminación de roles sin verificación.

  • Riesgo 1: Eliminación del Super Administrador: Se muestra que al eliminar el rol Super Admin, el usuario principal pierde inmediatamente todos los permisos, quedando bloqueado del sistema [00:30].
  • Riesgo 2: Eliminación de Roles Asociados a Usuarios: Se elimina el rol Operador, el cual estaba asignado a un usuario activo. Al intentar iniciar sesión, el usuario existe, pero como no tiene un rol asignado, pierde todo acceso al dashboard, lo que rompe la experiencia de usuario [03:50].
  • Solución Propuesta: Un rol solo debe ser eliminable si no tiene usuarios asociados [04:54].

2. Ajuste de la Vista: Ocultar el Rol "Super Admin"

Como el rol Super Admin es fundamental para el sistema, se decide ocultarlo de la lista de roles que pueden ser editados o eliminados.

  • Lógica en roles.index: Se añade una condición con un @if en la vista roles/index.blade.php para que la fila del rol solo se imprima si su nombre ($role->name) es diferente de "Super Admin" [02:15].
  • Ajuste de Iteración: Se usa una variable de contador ($contador) de PHP para corregir el índice de la tabla, que se desajusta al ocultar el primer rol [03:00].
  • Resultado: El Super Admin ya no aparece en la tabla, lo que evita su eliminación accidental o edición no deseada [03:38].

3. Implementación de la Validación en el Controlador

Se implementa la lógica en el controlador para verificar si el rol tiene usuarios asociados antes de intentar eliminarlo.

  • Ubicación: Se trabaja en la función destroy del RoleController [05:37].
  • Conteo de Usuarios Asociados:
    • Se declara la variable $usuarios_asociados.
    • Se utiliza el modelo User y la relación $role->users()->count() para contar cuántos usuarios tienen asignado el rol que se está intentando eliminar [06:16].
  • Lógica Condicional (If Statement):
    • Se verifica: if ($usuarios_asociados > 0).
    • Si es mayor a cero: El sistema retorna a la vista con un mensaje de error (return back()->with('error', ...)) [07:31].
    • Mensaje de Error Amigable: El mensaje explica que el rol no puede ser eliminado y muestra el nombre del rol y la cantidad de usuarios asociados (ej., "No se puede eliminar rol Operador porque tiene 1 usuarios asociados") [07:55].
    • Si es cero: El código de destroy continúa y elimina el rol de la base de datos [08:54].
  • Prueba Final: Se verifica que el sistema permite eliminar roles nuevos (ej., Cajero) que no tienen usuarios, pero bloquea la eliminación de roles como Operador y Administrador [09:30].

Fin del Módulo: Con este ajuste, el módulo de Roles y Permisos queda funcionalmente completo y robusto [10:01].