ADR-0012 — Multitenancy por Domínio e Papel PLATFORM_ADMIN
Status
Proposto
Contexto
O EBDbe evoluiu para atender múltiplos ministérios de forma isolada, com necessidade explícita de:
- Um domínio de internet por ministério (ex.:
ministerio-a.ebdbe.app) - Isolamento de dados e operações por tenant ministerial
- Governança central da plataforma para operação transversal entre ministérios
Os ADRs atuais já definem RBAC com escopo hierárquico e backend como autoridade, mas ainda não formalizam:
- Resolução obrigatória de tenant por domínio
- Regras para atuação cross-tenant
- Papel global de administração da plataforma (
PLATFORM_ADMIN)
Decisão
O sistema adotará multitenancy lógico por ministério, com resolução de tenant por domínio e suporte ao papel global PLATFORM_ADMIN.
1. Unidade de Tenant
- Cada
Ministryrepresenta um tenant lógico ministry_idpermanece a chave estrutural de isolamento- Todo acesso de usuário não global ocorre em contexto de tenant ministerial
2. Resolução de Tenant por Domínio
O backend deve resolver tenant da requisição pela seguinte ordem:
- Domínio de entrada (
host) mapeado paraministry_id - Contexto autenticado do usuário (claims e vínculos aprovados)
- Regras de autorização por papel e escopo (ADR-0003)
Se houver divergência entre domínio e escopo autorizado, a requisição deve ser negada (FORBIDDEN_SCOPE_MISMATCH).
3. Papel Global PLATFORM_ADMIN
PLATFORM_ADMIN é papel de governança da plataforma, com capacidade de operar entre ministérios para funções administrativas globais.
Regras obrigatórias:
- Exige autenticação forte (MFA) em toda sessão ativa
- Toda operação cross-tenant deve ser auditada
- Operações destrutivas/sensíveis devem registrar justificativa operacional
- Ações em dados ministeriais devem ocorrer com contexto explícito de tenant-alvo
4. Contexto Explícito para Ações Cross-Tenant
Para evitar bypass de escopo:
- Toda operação cross-tenant deve declarar
target_ministry_id - O backend valida
PLATFORM_ADMIN+ permissão da ação + tenant alvo - Não existe acesso implícito lateral por conveniência
5. Modelo de Dados e Configuração
O Ministry deve manter metadados de tenancy, incluindo:
domains[](domínios válidos do ministério)tenant_status(ACTIVE, SUSPENDED, MIGRATING)security_policy_ref(referência de políticas específicas, quando aplicável)
Esses metadados são fonte de verdade para resolução de tenant no backend.
Regras Arquiteturais Derivadas
- Backend authority: tenant, papel e escopo são sempre validados no backend.
- Sem bypass de escopo: frontend nunca define tenant de forma autoritativa.
- Firestore em infrastructure: queries com filtro obrigatório de
ministry_idpara dados ministeriais. - Auditoria obrigatória: toda ação de
PLATFORM_ADMINem tenant alvo gera trilha auditável. - Princípio do menor privilégio: papel global não elimina checagem de permissão por ação.
Integração com ADRs existentes
- ADR-0001: passa a explicitar multitenancy por domínio na arquitetura geral
- ADR-0002: inclui domínio como fronteira de entrada do ministério
- ADR-0003: incorpora
PLATFORM_ADMINe regras de escopo global/controlado - ADR-0010: autenticação forte obrigatória para
PLATFORM_ADMIN
Consequências
- O backend precisa de componente central de resolução de tenant por domínio.
- APIs devem receber/propagar contexto de tenant de forma explícita.
- Fluxos de suporte operacional ganham governança clara para atuação cross-tenant.
- A auditoria passa a ser requisito mínimo para administração global.
- Novas mudanças de estratégia de tenancy exigirão ADR complementar.