4.7 KiB
4.7 KiB
Plano de Execução Backend (Autenticação + Níveis de Acesso)
Este documento detalha, em ordem de prioridade, o que deve ser implementado no backend para destravar o produto, começando por autenticação e níveis de acesso. A ideia é evoluir sem quebrar o que já existe.
0) Princípios de execução (não quebrar o que já foi feito)
- Compatibilidade com o fluxo atual: preservar contratos de API existentes (ex.:
/auth/login,/auth/refresh,/auth/me). - Evolução incremental: cada etapa deve ser entregue com migrações e feature flags quando necessário.
- Observabilidade mínima: logs estruturados para autenticação e autorização (sucesso/falha).
- Segurança desde o início: hash de senha, JWT com expiração curta e refresh tokens.
1) Autenticação (Prioridade Máxima)
1.1. Modelo de dados base
-
Usuário (users)
id(UUID)email(unique)password_hashstatus(active, pending, blocked)created_at,updated_at
-
Refresh tokens (refresh_tokens)
id(UUID)user_id(FK users)token_hashexpires_atcreated_at,revoked_at
Entrega mínima: tabelas + migrações + seed de admin inicial.
1.2. Endpoints mínimos
POST /auth/login- Entrada:
email,password. - Saída:
accessToken,refreshToken,expiresIn,user.
- Entrada:
POST /auth/refresh- Entrada:
refreshToken. - Saída:
accessToken,refreshToken(rotacionado).
- Entrada:
POST /auth/logout- Entrada:
refreshToken. - Saída: 204.
- Entrada:
GET /auth/me- Requer bearer token.
- Saída:
user+roles+permissions.
1.3. Segurança mínima
- Senha: bcrypt (>= 10 rounds).
- JWT: access token curto (15–30min), refresh token longo (7–30 dias).
- Rotação: refresh token rotacionado a cada uso (revoga o anterior).
- Bloqueio: usuário com
status=blockednão autentica.
1.4. Infra/Configuração
- Variáveis de ambiente:
JWT_ACCESS_SECRET,JWT_REFRESH_SECRET.JWT_ACCESS_TTL,JWT_REFRESH_TTL.BCRYPT_ROUNDS.
2) Autorização por níveis de acesso (RBAC)
2.1. Modelo de dados
- Roles (ex.:
SUPERADMIN,ADMIN,GERENTE,COMPRADOR)roles: id, name, description
- Permissions (ex.:
catalog.read,orders.create)permissions: id, name, description
- Relações
user_roles: user_id + role_idrole_permissions: role_id + permission_id
2.2. Middleware/Guards
- Guard JWT: valida token.
- Guard Roles: verifica se o usuário possui role necessária.
- Guard Permissions: verifica permissão específica.
2.3. Padrão de uso (contrato)
- Em cada controller/rota protegida:
@UseGuards(JwtAuthGuard, RolesGuard)@Roles('ADMIN')@Permissions('orders.create')
3) Escopo multi-empresa (tenant/empresa)
3.1. Modelo de dados
- Empresas (companies)
id,name,cnpj,status
- Vínculo usuário-empresa
company_users: company_id + user_id + role_id
3.2. Guard de empresa ativa
- Todo usuário precisa de uma empresa ativa para acessar recursos de negócio.
- Middleware valida
company_idno token ou header, e injeta em contexto.
4) Gestão de usuários (Backoffice / Admin)
4.1. Endpoints mínimos
POST /users(criar usuário)GET /users(listar)PATCH /users/:id(status/roles)POST /users/:id/reset-password
4.2. Fluxo de convite
- Usuário criado com
status=pending. - Envia convite por e-mail para definir senha.
- Após definição de senha →
status=active.
5) Auditoria e logs
- Tabela de auditoria
audit_logs: user_id, action, resource, metadata, created_at.
- Eventos críticos
- login, refresh, mudança de role, alteração de status.
6) Checklist final (destravar)
- ✅ Auth login/refresh/me funcionando
- ✅ Token guard aplicado nas rotas críticas
- ✅ RBAC aplicado nas rotas admin
- ✅ Vínculo usuário↔empresa definido
- ✅ Logs de auditoria básicos
7) Ordem sugerida de execução (passo a passo)
- Criar schema de users + refresh_tokens.
- Implementar
/auth/login,/auth/refresh,/auth/me. - Adicionar middleware JWT e garantir
/auth/meprotegido. - Criar schema RBAC (roles, permissions, user_roles).
- Implementar Guards
RolesePermissions. - Introduzir
companiesecompany_users. - Guard de empresa ativa (multi-tenant).
- Endpoints de gestão de usuários (admin).
- Auditoria mínima.
8) Notas para manter compatibilidade
- Não renomear endpoints existentes.
- Manter payloads de login/refresh para o front atual.
- Adicionar campos novos sem remover antigos.