3.7 KiB
ERP Backend · Identity/Auth Migration Notes
Propósito
Este documento consolida las decisiones de arquitectura y el estado de migración del backend ERP desde el módulo legacy auth hacia el nuevo módulo identity.
Debe usarse como referencia para futuros incrementos relacionados con:
- autenticación
- sesión
- contexto tenant/company
- registro de usuarios
- roles y permisos
- autorización
- login frontend
- retirada progresiva de
modules/auth
Estado actual resumido
El backend ya dispone de un módulo identity registrado en servidor y con endpoints de autenticación funcionales:
POST /identity/auth/login
POST /identity/auth/refresh
POST /identity/auth/logout
GET /identity/auth/session
El módulo identity expone builders genéricos desde @erp/identity/api:
requireIdentityAuthenticated(params: StartParams): RequestHandler[];
requireIdentityTenant(params: StartParams): RequestHandler[];
Uso esperado en routers tenant-scoped:
import { requireIdentityTenant } from "@erp/identity/api";
router.use(...requireIdentityTenant(params));
Uso esperado en routers que solo requieren usuario autenticado:
import { requireIdentityAuthenticated } from "@erp/identity/api";
router.use(...requireIdentityAuthenticated(params));
Módulos backend migrados a identity
Ya no usan @erp/auth/api ni mockUser:
modules/catalogsmodules/customersmodules/customer-invoicesmodules/factuges
Consumidores legacy pendientes
Backend pendiente explícitamente:
modules/supplier/src/api/infrastructure/express/suppliers.routes.ts
Frontend todavía usa cliente legacy:
apps/web/src/register-modules.tsxapps/web/src/app.tsx
Por tanto, modules/auth no puede retirarse todavía.
Regla de arquitectura vigente
Los módulos funcionales no deben importar ni recomponer internals de identity.
No usar en módulos consumidores:
IdentityInternalDeps;
authenticateUserDependencies;
getInternal("identity");
No crear helpers de auth por módulo como patrón final:
catalogs-auth-middlewares.ts
customers-auth-middlewares.ts
...
El middleware genérico pertenece a identity.
Separación de responsabilidades
Authentication
Responde a:
- quién es el usuario
- si el token es válido
- si la cuenta puede autenticarse
Tenant context
Responde a:
- qué empresa activa se está usando en la request
- actualmente se resuelve por header
X-Company-Id
Authorization
Responderá a:
- qué permisos efectivos tiene el usuario dentro de la empresa
Todavía no está implementado en modo completo.
Document context
Datos como companySlug, templates, certificados o metadatos de generación documental no pertenecen al middleware de autenticación.
No añadir a identity auth:
companySlugX-Company-SlugcompanySlugen access token
Si un flujo documental necesita companySlug, debe resolverse mediante un servicio específico de empresa/documentos.
Roadmap corto recomendado
- Crear pantalla de login en Frontend ERP contra
/identity/auth/login. - Mantener
suppliertemporalmente en legacy si así se decide. - Implementar refresh automático en frontend.
- Implementar selección de empresa y uso de
X-Company-Id. - Implementar persistencia y validación real de
CompanyMembership. - Implementar resolución de permisos efectivos.
- Migrar
suppliercuando se decida. - Retirar backend legacy de
@erp/auth/api. - Migrar o retirar
@erp/auth/client.