05 Módulo USUARIOS en el curso de Sistema de gestión escolar con (PHP y MySql) FullStack parte 2

Duración: 59 min
Módulo: 🔑 Login, Roles y Usuarios Lección 4 de 4

Descripción

Lección 05 Módulo USUARIOS (Parte 2): CRUD Completo y Profesionalización

Este video finaliza el Módulo de Usuarios, implementando las acciones de Visualización (Show), Edición (Update) y Eliminación (Delete), con un fuerte enfoque en la seguridad de contraseñas y la integridad referencial de los datos.

1. Acción Ver/Mostrar (Show) 👀

Se desarrolla la vista para mostrar de forma segura la información de un usuario específico.

  • Consulta con JOIN: Se utiliza una consulta con INNER JOIN para obtener los datos del usuario junto con el nombre del rol al que pertenece, haciendo la información más legible [03:47].
  • Seguridad de Contraseña: Se enfatiza que la contraseña no se debe mostrar en esta vista, ya que está cifrada (hashed) y no sirve de nada al administrador o al usuario ver el hash encriptado [08:13].
  • Estado del Usuario: El valor numérico del campo estado (1 o 0) de la base de datos se traduce y se muestra condicionalmente en la vista como "Activo" o "Inactivo" [10:29].
  • Datos Adicionales: Se muestra la Fecha y Hora de Creación y el Estado del registro [09:06].

2. Acción Editar/Actualizar (Update) ✍️

Se implementa la lógica más compleja del módulo para permitir la modificación de usuarios, con especial atención al manejo de la contraseña.

  • Carga de Datos: El formulario de edición recibe y precarga todos los datos actuales del usuario seleccionado [13:29].
  • Selección de Rol Dinámica: Se implementa una condición PHP dentro del loop de roles (<option>) para aplicar el atributo selected y asegurar que el rol actual del usuario se muestre seleccionado por defecto en el dropdown [16:16], [19:09].
  • Actualización Condicional de Contraseña 🛡️:
    • Lógica Principal: El controlador (update) primero pregunta si los campos de password están vacíos [22:36].
    • Escenario 1 (No se cambia contraseña): Si la contraseña está vacía, se ejecuta una sentencia UPDATE que omite el campo password, manteniendo el hash anterior. [23:17]
    • Escenario 2 (Se cambia contraseña): Si se introducen contraseñas, se realiza la validación de igualdad y, si son correctas, se encripta la nueva contraseña con password_hash() antes de ejecutar una sentencia UPDATE que incluye el nuevo hash [29:15], [30:07].
  • Restricción de Email: Se mantiene la validación de unicidad para el campo Email, impidiendo que se actualice el usuario con un correo que ya existe en la base de datos [31:35].

3. Acción Eliminar (Delete) y Corrección de Integridad ❌

Se desarrolla la lógica de eliminación y se corrigen errores cruciales de seguridad y usabilidad en los módulos.

  • Lógica de Eliminación de Usuario: Se crea el controlador delete que ejecuta la sentencia DELETE FROM usuarios WHERE ID_usuario = :id, con la alerta de confirmación previa (SweetAlert) [33:18].
  • Corrección Crítica de ID: Se corrige un error que hacía que la función de eliminar tomara siempre el último registro. La solución fue pasar el ID único del registro a la función de JavaScript en el Index de ambos módulos (Roles y Usuarios) para asegurar que solo se elimina el elemento correcto [38:26], [44:37].
  • Manejo de Integridad Referencial (Módulo Roles): Para evitar errores de violación de llave foránea al intentar borrar un rol con usuarios asociados, se implementa una verificación previa [39:56]:
    1. Se consulta la tabla usuarios para ver si existe algún registro con el ID_roll que se quiere eliminar.
    2. Si el contador es mayor a cero, se muestra un mensaje de error elegante: "Existe este rol en otra tabla, no se puede eliminar" [43:04].
    3. Si el contador es cero, el rol se elimina con normalidad.

4. Mejoras de Interfaz y Control de Versiones 📊

  • Widgets en Dashboard: Se añaden tarjetas informativas (widgets) a la plantilla principal (Index) del administrador para mostrar estadísticas rápidas, incluyendo el total de Roles Registrados y el total de Usuarios Registrados [47:25].
  • Commit a GitHub: Se realiza el tercer commit del proyecto, etiquetado como "se agregó el módulo usuarios", subiendo todas las funcionalidades desarrolladas al repositorio en GitHub [56:11].