obsidian-vault/Pizza-Digital/PRD/PRD-SPEC-MATRIZ-ACESSO.md

69 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# PRD — Matriz de Acesso (MVP)
| 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-MATRIZ-ACESSO.md` |
| **Módulo** | Capabilities admin por tenant |
| **Rotas UI** | `/admin/acessos` |
| **APIs** | `/api/access/*` |
| **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. Ideia central (dev)
Roles operacionais (`gestor|pdv|kds|despacho`) ≠ capabilities admin.
Capabilities vivem em `UserCapability` e são **revalidadas no Core** a cada ação sensível.
### Caps
`menu.view/manage` · `staff.view/manage` · `permissions.manage` · `owners.manage` · `finance.view`
## 2. Processo — ver minhas permissões
1. Login JWT (`sub`, `storeId`, `role`)
2. `GET /api/access/me` → capabilities efetivas
3. Front esconde/mostra Admin conforme caps
## 3. Processo — editar matriz
1. Usuário com `permissions.manage`
2. `GET /api/access/matrix` carrega templates Perfil×Cap
3. Edita rascunho na UI `/admin/acessos`
4. `PUT /api/access/matrix` salva definição do template (atômico)
5. **Não** propaga sozinho aos users
## 4. Processo — aplicar template a usuários
1. Seleciona staff `GET /api/access/staff`
2. `POST /api/access/apply-template` { userIds, templateKey }
3. Reescreve `UserCapability`
4. Auditoria `AccessAuditLog` (quando habilitada)
## 5. Dependências Core
- `menu.manage` ⇒ `menu.view`
- `staff.manage` ⇒ `staff.view`
- Normalização em `capabilities.ts`
## 6. Aceite
- ✅ API matrix/me/staff/apply
- ✅ UI AccessMatrixPage
- ⚠️ Auditoria completa em todos writes
## 7. Camada de serviço (AccessService)
| Método | Fluxo |
|--------|-------|
| `ensureTemplates` | Garante templates default da loja |
| `getEffectiveCapabilities` | Resolve caps (+ fallback gestor) |
| `assertCapability` | Throws ForbiddenException |
| `getMatrix` / `saveMatrix` | CRUD definição |
| `applyTemplate` | Propaga para users |
| `listStaffForApply` | Alvos |
| `assertTenantKeepsOwner` | Não deixa loja sem owner |
| `setUserCapabilities` | Write direto |