01
Isolamento é do banco, não do código
A separação entre empresas quase sempre é uma condição escrita em cada consulta. Funciona até o dia em que alguém escreve uma consulta e esquece, e esse dia não avisa. Aqui a regra mora no PostgreSQL: toda tabela com dado de cliente tem política de linha ligada e forçada, e a consulta que chega sem contexto de empresa devolve zero linha.
- a aplicação conecta por um papel próprio, criado sem poder de contornar a política
- o PostgreSQL ignora política de linha para superusuário, por isso o papel da aplicação não é um
- “não encontrei” é a mesma resposta para o que não existe e para o que é de outra empresa
- política ligada e forçada em cada tabela
alembic/versions/0005_agents_conversations.py:557 - papel da aplicação criado sem contorno
alembic/versions/0001_extensions_roles_context.py:42 - a aplicação usa esse papel, nunca o de migração
src/nexo/db/session.py:22 - o contexto da empresa entra por transação
src/nexo/db/session.py:59 - o teste que existe só para pegar o erro mais caro
tests/test_rls.py:40