ADR-0014 — Gateway Único de Operações de Usuário com Handlers por Ação
Status
Proposto
Contexto
Os ADRs atuais ja definem principios essenciais para identidade e seguranca no EBDbe:
- Multitenancy por dominio e validacao de escopo no backend (ADR-0012)
- Perfil de usuario, ciclo de vida e transicoes de status (ADR-0013)
- Backend como autoridade e proibicao de bypass de escopo
Entretanto, ainda nao ha formalizacao da estrategia de exposicao de operacoes de usuario no backend quanto a:
- Padrao de entrada para operacoes CRUD e transicoes de status
- Forma de roteamento de acoes sem concentrar logica de negocio em um bloco unico
- Pipeline obrigatorio de seguranca por requisicao
- Contratos minimos de request/response, auditoria e erro
Sem essa formalizacao, ha risco de evolucao para uma "funcao monolitica" (God Function), com aumento de complexidade, risco de regressao de autorizacao e menor auditabilidade.
Decisão
O sistema adotará um Gateway Único de Operações de Usuário na borda de Functions, com handlers por ação internamente, preservando Clean Architecture.
1. Entrada unica, execucao segmentada
- Havera um endpoint/gateway unico para operacoes de usuario.
- O gateway apenas orquestra validacoes e despacho.
- Cada acao sera executada por seu respectivo handler/use case dedicado.
- E vedado concentrar regras de dominio de multiplas acoes em um unico bloco condicional extenso.
2. Contrato de requisicao (request contract)
Toda requisicao deve incluir, no minimo:
version(ex.:v1)action(whitelist estrita, sem acao dinamica)payload(schema especifico por acao)meta.request_id(idempotencia e rastreabilidade)meta.target_ministry_id(obrigatorio em contexto cross-tenant)meta.reason(obrigatorio para acoes sensiveis/destrutivas)
Acoes permitidas devem ser explicitamente mapeadas (exemplos):
USER_CREATE, USER_GET, USER_UPDATE, USER_DELETE, USER_CHANGE_STATUS, USER_LIST.
3. Pipeline obrigatorio por requisicao
A ordem de execucao no gateway e mandatoria:
- Autenticar solicitante (
actor_user_id, claims) - Resolver tenant por dominio/host
- Validar coerencia de escopo (
actor, alvo, tenant) - Autorizar acao por papel + escopo
- Validar payload por schema da acao
- Executar use case correspondente
- Registrar auditoria
- Retornar resposta padronizada
Nenhuma acao de usuario deve executar fora desse pipeline.
4. Autorizacao e escopo
- Toda decisao de autorizacao e do backend.
- Operacoes no tenant ministerial exigem aderencia de
ministry_id. - Operacoes cross-tenant exigem
PLATFORM_ADMIN+target_ministry_idexplicito. - Divergencia entre dominio resolvido e escopo autorizado deve negar a requisicao (
FORBIDDEN_SCOPE_MISMATCH).
5. Regras de status e ciclo de vida
- Alteracoes de status devem respeitar integralmente a matriz de transicoes do ADR-0013.
DELETEDpermanece estado terminal.- Transicoes sensiveis exigem justificativa (
reason) e trilha auditavel.
6. Padrao de resposta e erro
A resposta deve seguir envelope padronizado com:
okactiondataaudit(metadados de execucao relevantes)errorpadronizado (code,message,details)
Esse padrao e obrigatorio para consistencia entre frontend, observabilidade e suporte operacional.
7. Observabilidade, idempotencia e resiliencia
- Logs estruturados por acao (
action,actor,target,tenant,result,request_id) - Idempotencia para operacoes sensiveis via
request_id - Auditoria obrigatoria para alteracoes de status e acoes cross-tenant
- Rate limit por ator/contexto para reduzir abuso
Regras Arquiteturais Derivadas
- Gateway unico nao implica dominio acoplado; logica de negocio permanece em use cases/servicos de dominio.
- Toda acao de usuario deve ter schema de entrada e politica de autorizacao proprios.
- Firestore permanece restrito a camada de infrastructure.
- Nenhuma operacao de usuario pode bypassar validacao de tenant e escopo.
- Toda operacao sensivel/destrutiva deve exigir justificativa operacional e auditoria.
Integracao com ADRs existentes
- ADR-0012: aplica resolucao de tenant por dominio e regras cross-tenant com
PLATFORM_ADMIN. - ADR-0013: aplica modelo de perfil e matriz de transicao de status.
- ADR-0003: mantem RBAC por acao e escopo hierarquico.
- ADR-0006: reforca minimizacao de dados e tratamento de dados pessoais.
- ADR-0010: mantem requisitos de seguranca de autenticacao/sessao para acoes administrativas.
Consequencias
- O backend ganha um padrao unico de entrada e governanca de seguranca por operacao.
- A manutencao evolui por acao (handlers/use cases), com menor risco de regressao.
- A autorizacao fica mais auditavel e testavel por matriz de acao/perfil/escopo.
- O custo inicial de modelagem aumenta (schemas, politicas e testes por acao).
- Mudancas no catalogo de acoes ou no contrato exigirao revisao deste ADR ou ADR complementar.