obsidian-vault/Pizza-Digital/PRD/PRD-SPEC-USUARIOS.md

65 lines
2.3 KiB
Markdown

# PRD — Usuários, senha e sessão
| Campo | Valor |
|-------|--------|
| **Produto** | Pizza Digital |
| **Versão app auditada** | v0.5.0 |
| **Ambiente** | https://pizza.itecnologys.com · VM125 · loja `pizza-digital-piloto` |
| **Spec de origem** | `docs/SPEC-USUARIOS.md` |
| **Módulo** | Auth + equipe |
| **Rotas UI** | `/login` `/admin/equipe` `/forgot-password` `/reset-password` |
| **APIs** | `/api/auth/*` `/api/users/*` |
| **Data** | 2026-11-09 |
| **Estilo** | PRD operacional detalhado (visão de desenvolvedor) |
| **Audiência** | Dev / QA / Product |
> Como ler: cada seção descreve o **processo real** (o que o sistema faz hoje),
> com passos de usuário, chamadas de API, regras de negócio e estados.
> Status: ✅ construído · ⚠️ parcial · ⏳ especificado / não entregue · 🐛 gap observado.
## 1. Entidades
`User`, `AuthToken`, `PushDevice`, `NotifyLog`, `UserCapability`
## 2. Processo — login
1. UI `/login` (demo: `pdv@pizza.local` / `805353` + storeSlug)
2. `POST /api/auth/login` { email, password, storeSlug }
3. Valida hash bcrypt; incrementa `failedLoginAttempts`
4. 5 falhas → `lockedUntil` +15 min
5. Sucesso → JWT + user + capabilities
6. `GET /api/auth/me` para refresh de sessão
## 3. Processo — política de senha
1. `GET /api/auth/password-policy`
2. Regras: ≥8, 1 upper, 1 lower, 1 dígito, sem local-part email
3. Código: `password-policy.ts`
## 4. Processo — CRUD equipe
1. Cap `staff.view` lista `GET /api/users`
2. Cap `staff.manage` cria `POST /api/users` (role, áreas, jobTitle)
3. Criar gestor extra exige `owners.manage`
4. Pode aplicar template na criação
5. `POST /api/users/:id/send-reset` dispara token reset
## 5. Processo — forgot / reset
1. `POST /api/auth/forgot-password` → resposta genérica
2. Token `password_reset` TTL 60 min
3. `POST /api/auth/reset-password` consome token, limpa lockout
4. `POST /api/auth/change-password` (autenticado)
## 6. Aceite
- ✅ Login/lockout/policy/CRUD/reset stub
- ⏳ SMTP/push produção (RF-USR-10)
## 7. Camada de serviço (AuthService)
| Método | Fluxo |
|--------|-------|
| `login` | storeSlug+email+senha → JWT; lockout |
| `me` | Rehidrata user+caps |
| `requestPasswordReset` | Token genérico |
| `resetPassword` | Consome token |
| `changePassword` | Autenticado |
UsersService: list/meta/create/update/sendReset/pushDevice.