31 lines
1.5 KiB
Markdown
31 lines
1.5 KiB
Markdown
# F-154 — Admin: separate customers from internal users
|
|
|
|
## Problem
|
|
El panel admin muestra usuarios mezclados. `GET /users` (módulo `users`) devuelve
|
|
TODOS los identity_users (clientes + backoffice) y `GET /admin/users` (módulo `security`)
|
|
por defecto también devuelve todos. La página Customers llama a `/api/users` y la página
|
|
Users llama a `/api/admin/users`; como ambos devuelven todo, ambos listados aparecen
|
|
mezclados (conceptos de identity/storefront con backoffice en un mismo listado).
|
|
|
|
## Goal
|
|
Customers muestra SOLO clientes storefront (`role = 'customer'`); Users muestra SOLO
|
|
usuarios internos/backoffice (`role != 'customer'`). Separación forzada en el backend
|
|
(single source of truth), no solo filtrado cliente.
|
|
|
|
## Scope IN
|
|
- `project/src/modules/users` (`listCustomers` / `GET /users`): filtrar `role = 'customer'`.
|
|
- `project/src/modules/security` (`GET /admin/users`): default `role != 'customer'`;
|
|
`?role=admin|editor` sigue afinando dentro de internos.
|
|
- `project/apps/admin/.../users/page.tsx`: quitar opción `customer` del dropdown (Users = backoffice).
|
|
- Tests unitarios (mock pool, sin DB) + actualizar itest AC2/AC3.
|
|
|
|
## Scope OUT
|
|
- No se crea `/customers` (el cliente ya consume `/users`).
|
|
- `/users/:id`, `/users/:id/addresses` (owner-or-admin) siguen sin filtro por rol (un admin
|
|
ve el perfil de cualquier usuario; un cliente ve el suyo).
|
|
- No migración (identity_users.role ya existe, NOT NULL con default 'customer').
|
|
- Frontend Customer page: sin cambio (ya llama /users → ahora customer-only).
|
|
|
|
## Type
|
|
fix — high priority / high risk.
|