4.7 KiB
4.7 KiB
RF-MGN-001-003: Gestión de Usuarios
Módulo: MGN-001 - Fundamentos Prioridad: P0 (MVP) Story Points: 8 Estado: Definido Fecha: 2025-11-23
Descripción
El sistema debe permitir la creación, lectura, actualización y desactivación (soft delete) de usuarios. Incluye gestión de perfiles, asignación de roles y control de estado (activo/inactivo).
Actores
- Actor Principal: Administrador de Sistema
- Actores Secundarios: Usuario (gestiona su propio perfil)
Precondiciones
- Usuario administrador debe estar autenticado
- Sistema debe tener roles disponibles para asignar
- Tenant debe estar activo
Flujo Principal
- Administrador accede a módulo de Gestión de Usuarios
- Administrador crea nuevo usuario con datos: nombre, email, teléfono
- Sistema valida que email sea único dentro del tenant
- Sistema genera contraseña temporal o permite definir contraseña
- Administrador asigna uno o más roles al usuario
- Sistema hashea contraseña con bcrypt (cost factor 12)
- Sistema crea registro en auth.users con status='active'
- Sistema envía email de bienvenida con credenciales (opcional)
- Usuario recibe notificación y puede iniciar sesión
Flujos Alternativos
FA-1: Email Duplicado
- Si email ya existe en el tenant
- Sistema retorna error 400: "Email ya está registrado"
FA-2: Actualización de Perfil Propio
- Usuario autenticado accede a su perfil
- Usuario actualiza nombre, teléfono, foto, idioma preferido
- Sistema valida cambios
- Sistema actualiza auth.users
- Usuario NO puede cambiar su propio email ni roles
FA-3: Cambio de Contraseña
- Usuario autenticado solicita cambio de contraseña
- Sistema valida contraseña actual
- Usuario ingresa nueva contraseña (debe cumplir política de seguridad)
- Sistema valida nueva contraseña (8+ chars, mayúscula, número, símbolo)
- Sistema hashea nueva contraseña
- Sistema actualiza auth.users.password_hash
- Sistema invalida refresh tokens existentes (logout forzado en otros dispositivos)
FA-4: Desactivación de Usuario
- Administrador selecciona usuario activo
- Administrador desactiva usuario (soft delete: status='inactive')
- Sistema invalida tokens activos del usuario
- Usuario NO puede volver a iniciar sesión
- Datos del usuario se conservan (no se elimina de DB)
FA-5: Reactivación de Usuario
- Administrador selecciona usuario inactivo
- Administrador reactiva usuario (status='active')
- Usuario puede volver a iniciar sesión
Reglas de Negocio
- RN-1: Email debe ser único por tenant (no globalmente)
- RN-2: Contraseña debe cumplir política: 8+ chars, 1 mayúscula, 1 número, 1 símbolo
- RN-3: Usuario inactivo no puede autenticarse
- RN-4: Usuarios eliminados son soft delete (status='inactive', deleted_at!=null)
- RN-5: Usuario puede actualizar su propio perfil, pero NO sus roles
- RN-6: Solo administradores pueden crear/desactivar usuarios
- RN-7: Cambio de contraseña invalida refresh tokens existentes
Criterios de Aceptación
- Administrador puede crear nuevos usuarios con email, nombre, roles
- Sistema valida unicidad de email dentro del tenant
- Contraseña se almacena hasheada con bcrypt
- Usuario puede actualizar su propio perfil (nombre, foto, idioma)
- Usuario puede cambiar su propia contraseña
- Administrador puede desactivar usuarios (soft delete)
- Administrador puede reactivar usuarios desactivados
- Usuario inactivo no puede iniciar sesión
- Cambio de contraseña invalida sesiones activas en otros dispositivos
- Sistema envía email de bienvenida a nuevos usuarios
Entidades Involucradas
- Principales:
- auth.users (email, password_hash, name, phone, avatar, status, language)
- auth.user_roles (asignación roles a usuarios)
- Relacionadas:
- auth.roles (roles disponibles)
- auth.tenants (tenant del usuario)
Referencias
Notas Técnicas
- Patrón Odoo: Similar a res.users en odoo/base
- Patrón Gamilit: CRUD usuarios con soft delete
- Seguridad: Nunca retornar password_hash en APIs
- Backend: NestJS UsersService + bcrypt para hashing
- Frontend: Formulario de creación/edición con validación client-side
- Email: Integrar con servicio de email (SendGrid, AWS SES) para bienvenida
Dependencias
- RF Dependientes:
- RF-MGN-001-001 (Autenticación)
- RF-MGN-001-002 (Roles)
- Bloqueante para: RF-MGN-002-003 (Asignación usuarios a empresas)