Saltar a contenido

Épica Detallada - Inicio de Sesión de Usuarios

Visión General de la Épica

La épica de Gestión de Usuarios es el punto de partida de nuestro sistema de feedback. Establece la base para la autenticación y autorización, permitiendo que diferentes tipos de usuarios (colaboradores, PDM y administradores) accedan a funcionalidades específicas según sus roles.

Esta épica abarca la siguiente funcionalidad:

  1. Inicio de Sesión en la Plataforma: Permitir que colaboradores y PDM inicien sesión en la plataforma y, si es la primera vez, definan una contraseña.

Vista de Usuario

COMO un colaborador, PDM o administrador QUIERO iniciar sesión en la plataforma PARA PODER acceder a mis datos y funcionalidades asociadas a mi perfil

Narrativa de Negocio

Permitir que colaboradores, PDM y administradores inicien sesión en la plataforma y tengan acceso a las funcionalidades asociadas a sus perfiles. En caso de ser el primer acceso, permitir la definición de la contraseña.

Flujo de Pantallas

INICIO DE SESIÓN

  1. El usuario accede a la página de inicio de sesión.
  2. El sistema muestra campos para ingresar correo electrónico y contraseña.
  3. El usuario ingresa su correo electrónico y contraseña.
  4. El usuario hace clic en el botón "Iniciar Sesión".
  5. El sistema valida las credenciales:
    1. Si hay un error, muestra un mensaje de error y permite un nuevo intento.
    2. Si es exitoso, inicia la sesión que contiene los datos del usuario que ha iniciado sesión.
  6. El sistema redirige al usuario a la página de inicio de la plataforma.

PRIMER ACCESO

  1. El usuario hace clic en el botón "Primer Acceso":
  2. El usuario ingresa correo electrónico, contraseña y confirmación de contraseña.
  3. El usuario hace clic en el botón "Guardar Contraseña".
  4. El sistema valida si el usuario ya está prerregistrado.
    1. Si no está prerregistrado, muestra un mensaje de error.
    2. Si está prerregistrado, se muestra un nuevo campo para que el usuario ingrese el código de acceso.
  5. El usuario recibe por correo electrónico el código de acceso generado por el sistema.
  6. El usuario ingresa este código.
  7. El sistema valida el código.
    1. Si es correcto, el sistema muestra un mensaje de confirmación de que la contraseña se ha definido con éxito y el usuario es redirigido a la pantalla de inicio de sesión.
    2. Si no es correcto, muestra un mensaje de error.

OLVIDÉ MI CONTRASEÑA

  1. El usuario hace clic en el botón "Olvidé mi Contraseña":
  2. El usuario ingresa correo electrónico, nueva contraseña y confirmación de contraseña.
  3. El usuario hace clic en el botón "Guardar Contraseña".
  4. El sistema valida si el usuario ya está registrado.
    1. Si no está registrado, muestra un mensaje de error.
    2. Si está registrado, se muestra un nuevo campo para que el usuario ingrese el código de acceso.
  5. El usuario recibe por correo electrónico el código de acceso generado por el sistema.
  6. El usuario ingresa este código.
  7. El sistema valida el código.
    1. Si es correcto, el sistema muestra un mensaje de confirmación de que la contraseña se ha definido con éxito y el usuario es redirigido a la pantalla de inicio de sesión.
    2. Si no es correcto, muestra un mensaje de error.

Requisitos No Funcionales

  • El sistema debe generar un token JWT con los datos del usuario en los claims, incluyendo información del PDM.

Criterios de Aceptación

  • El sistema debe permitir que colaboradores, PDM y administradores inicien sesión.
  • El sistema debe mostrar una pantalla para definir la contraseña si es el primer acceso del usuario.
  • El sistema debe mostrar una pantalla para restablecer la contraseña si el usuario la ha olvidado.
  • El administrador también debe iniciar sesión en el sistema, pero solo se registra a través de una línea de comandos.

Visión de las Historias

mmd

Inicio de Sesión en la Plataforma

  1. Configuración del módulo

    • Configurar el proyecto Spring Boot para el microservicio de gestión de usuarios.
    • Configurar la base de datos PostgreSQL.
    • Configurar la librería de seguridad para JWT.
  2. Crear línea de comandos para registro de administradores

    • Implementar un CommandLineRunner para el registro de administradores.
    • Añadir cifrado de contraseñas con BCrypt.
    • Implementar validaciones de datos.
  3. Definición de Contraseña en el Primer Inicio de Sesión

    • Crear la pantalla de primer acceso, con campos de correo electrónico, nueva contraseña y repetir nueva contraseña.
    • Crear un botón de envío de código de seguridad.
    • Implementar un endpoint de envío de código de seguridad, que genera el código y lo envía por correo electrónico (OTP).
    • Implementar un endpoint para la definición de contraseña, que recibe la contraseña y el código de seguridad.
  4. Flujo de inicio de sesión de colaboradores, admin y PDM

    • Implementar la pantalla de inicio de sesión con campos de usuario y contraseña.
    • Implementar un endpoint para el inicio de sesión, validando correo y contraseña (Usar BCrypt para la validación y almacenamiento de contraseñas).
    • Implementar el manejo de errores; el backend envía mensajes para ser mostrados en el frontend.
  5. Implementación del código de seguridad (One Time Password)

    • Después de iniciar sesión con correo y contraseña, redirigir a la pantalla de código de seguridad (OTP).
    • Implementar la pantalla de validación de código de seguridad (OTP).
    • Implementar un servicio para el envío de código de seguridad (OTP).
    • Implementar un endpoint de recepción y validación del código de seguridad (OTP).
  6. Gestión de la sesión del usuario

    • Implementar un servicio para la generación de token JWT.
    • Incluir claims relevantes en el token (ID, nombre, correo, tipo, PDM).
    • Configurar el tiempo de expiración del token.
    • Almacenar el token JWT en el local storage.
    • Implementar un interceptor para incluir el token en las solicitudes.
  7. Aplicar filtro de bloqueo de acceso para admin

    • Implementar el filtro de seguridad para rutas administrativas en el backend.
    • Implementar un middleware que restrinja el acceso a rutas privadas.
    • Configurar la autorización basada en roles (Middleware de NextJS que verifica el acceso de determinados roles a determinadas rutas).