Uecko_ERP/modules/identity/README.md

124 lines
2.2 KiB
Markdown
Raw Permalink Normal View History

2026-07-06 15:47:05 +00:00
# `modules/identity`
2026-07-01 07:51:22 +00:00
2026-07-06 15:47:05 +00:00
`identity` es el runtime nuevo de autenticación, sesión y acceso por memberships del ERP.
2026-07-01 07:51:22 +00:00
2026-07-06 15:47:05 +00:00
## Responsabilidades
2026-07-01 07:51:22 +00:00
2026-07-06 15:47:05 +00:00
Gestiona:
2026-07-01 07:51:22 +00:00
2026-07-06 15:47:05 +00:00
- `Account`
- login
- refresh
- logout
- session
- `RefreshToken`
- `CompanyMembership`
- acceso `account-company`
- roles/permisos futuros
No gestiona:
- la ficha operativa completa de empresa
- `companySlug` en auth
- el tenant dentro del access token
## Endpoints activos
```http
POST /identity/auth/login
POST /identity/auth/refresh
POST /identity/auth/logout
GET /identity/auth/session
```
El endpoint para companies accesibles es:
```http
GET /companies/available
```
Ese endpoint pertenece al flujo actual, pero no implica que `identity` deba exponer `GET /identity/companies`.
## Access token
El access token contiene solo:
```ts
{
accountId: string;
email: string;
}
```
No debe contener:
- `companyId`
- `companySlug`
- roles
- permisos
## Middlewares públicos
Para rutas autenticadas sin tenant:
```ts
router.use(...requireIdentityAuthenticated(params));
```
Para rutas tenant-scoped:
```ts
router.use(...requireIdentityTenant(params));
```
Código backend nuevo no debe usar:
- `@erp/auth/api`
- `mockUser`
- `requireAuthenticated` legacy
- `requireCompanyContext` legacy
## Servicios públicos
`identity` expone el servicio:
```txt
identity:general
```
Con acceso a `companyAccess` para casos como:
```ts
canAccessCompany(...)
findAccessibleCompanyIds(...)
```
Responsabilidad:
- `identity` decide qué `companyId` puede usar una cuenta según memberships activas.
- no devuelve la ficha completa de empresa.
## Tenant context
`requireIdentityTenant(params)` compone:
- `identity:general.companyAccess`
- `companies:general.finder`
Validación esperada:
1. access token válido
2. cuenta autenticable
3. `X-Company-Id` presente
4. `X-Company-Id` UUID válido
5. membership activa
6. company activa
7. `req.user.companyId` poblado
## Reglas de mantenimiento
- Backend nuevo: usar `@erp/identity/api`.
- No documentar ni crear `GET /identity/companies`.
- No borrar `modules/auth` mientras existan consumidores legacy reales.
- `modules/supplier` sigue pendiente de migración si continúa usando el runtime legacy.