erp-core/docs/05-user-stories/mgn-001/US-MGN-001-003-002-gestion-perfil-y-cambio-password.md

3.3 KiB

US-MGN-001-003-002: Gestión de Perfil Propio y Cambio de Contraseña

RF Asociado: RF-MGN-001-003 Módulo: MGN-001 - Fundamentos Epic: Gestión de Usuarios Prioridad: P0 (MVP) Story Points: 3 Sprint: Sprint 2 Estado: Ready for Development Fecha: 2025-11-24


User Story

Como usuario autenticado, Quiero editar mi perfil (nombre, foto, idioma) y cambiar mi contraseña, Para personalizar mi cuenta y mantener mi seguridad.


Descripción Detallada

Usuario puede actualizar su propio perfil (NO email ni roles, solo admin puede). Cambio de contraseña requiere contraseña actual, revoca refresh tokens existentes.


Criterios de Aceptación

Escenario 1: Actualizar perfil propio

Dado que estoy autenticado, Cuando actualizo nombre, teléfono, foto, idioma, Entonces cambios se guardan, NO puedo cambiar email ni roles.

Escenario 2: Cambiar contraseña

Dado que ingreso contraseña actual correcta y nueva contraseña válida, Cuando cambio mi contraseña, Entonces password_hash actualizado, refresh tokens revocados, sesiones en otros dispositivos cerradas.

Escenario 3: Contraseña actual incorrecta

Dado que ingreso contraseña actual incorrecta, Cuando intento cambiar contraseña, Entonces retorna error 401 "Contraseña actual incorrecta".

Escenario 4: Nueva contraseña no cumple política

Dado que nueva contraseña tiene menos de 8 chars o sin mayúscula, Cuando intento cambiarla, Entonces retorna error 400 con política de contraseñas.


Reglas de Negocio

  • RN-1: Usuario NO puede cambiar su email ni roles (solo admin)
  • RN-2: Cambio de contraseña requiere contraseña actual
  • RN-3: Nueva contraseña: 8+ chars, 1 mayúscula, 1 número, 1 símbolo
  • RN-4: Al cambiar contraseña: revocar todos los refresh tokens

Tareas Técnicas

Backend

  • GET /api/v1/auth/me - Obtener perfil propio
  • PATCH /api/v1/auth/me - Actualizar perfil
  • POST /api/v1/auth/me/change-password - Cambiar contraseña
  • UsersService.updateProfile/changePassword
  • Validar contraseña actual con bcrypt.compare
  • Revocar refresh tokens al cambiar contraseña
  • Unit + Integration tests (8 casos)

Frontend

  • ProfilePage con formulario de perfil
  • ChangePasswordModal con 3 campos (actual, nueva, confirmar)
  • Upload de foto con preview
  • Selector de idioma (es, en)
  • API client + Zustand store
  • Tests

Database

  • Actualizar auth.users (name, phone, avatar, language)
  • DELETE FROM auth.sessions WHERE user_id=X al cambiar password

Estimación: 3 SP (6 horas)


Definition of Done

  • Perfil propio editable
  • Cambio de contraseña funcionando
  • Revocación de tokens funcionando
  • Tests pasando
  • Code review aprobado

Referencias