1 parent
6e23f1533b
commit
419325db12
52 files changed
+1329
-110
No files matched your search
@@ -0,0 +1,17 @@
|
||||
# Isolamento multi-tenant
|
||||
|
||||
Invariantes:
|
||||
|
||||
1. O workspace da operação é o do contexto resolvido no servidor.
|
||||
2. RLS com `app_user` esconde linha de outro workspace e de outro usuário no mesmo workspace.
|
||||
3. A flag do módulo é relida no banco em listagem, processamento e download.
|
||||
4. Download só lê chave `workspaces/{workspaceId}/tmp/`.
|
||||
5. Limpeza só apaga chave com o prefixo do workspace dono da linha.
|
||||
6. Auditoria não é atualizada pelo papel da aplicação.
|
||||
7. Texto de célula não entra em auditoria nem no payload enviado ao Sentry.
|
||||
|
||||
A suíte `tests/security/isolation.test.ts` e `tests/integration/rls.test.ts` cobre workspace A/B, admin com módulo desligado, agente sem o job de outro usuário, flag desligada depois do processamento, `workspaceId` de quem não é membro, lock concorrente e arquivo hostil.
|
||||
|
||||
URL assinada permanente não é emitida. O download é a rota autenticada. Reutilizar um id de outro workspace devolve `NOT_FOUND` ou `FEATURE_DISABLED`.
|
||||
|
||||
O que ainda depende do Postgres e do Storage reais está marcado no gate final.
|
||||
Reference in new issue
Block a user