Matriz de Políticas Row-Level Security (RLS)

O isolamento multi-tenant do ecossistema apoia-se em políticas declarativas de Row-Level Security (RLS) no PostgreSQL, com ativação estrita de FORCE ROW LEVEL SECURITY nas entidades de fronteira.

1. Matriz de Políticas por Entidade

Tabela Papel Comando Condição de Isolamento & Regra

connect.partner_brandings

anon / authenticated

SELECT

custom_domain IS NOT NULL (leitura pública para resolução de tema e branding multi-tenant).

connect.organizations

authenticated

SELECT

partner_id = (SELECT auth.current_partner_id())

connect.organizations

authenticated

INSERT

Bloqueado via RLS direta; mutação permitida exclusivamente via RPC connect.provision_organization.

connect.store_groups

authenticated

SELECT / ALL

Delimitado pela organização ativa do usuário autenticado.

connect.locations

authenticated

SELECT / ALL

FORCE ROW LEVEL SECURITY ativo. Acesso delimitado por connect.has_location_permission cruzando user_location_access para papéis de unidade (store_manager, operator).

connect.tags / location_tags

authenticated

SELECT / ALL

Delimitado à organização ativa sob papéis de gestão (org_admin, store_manager).

connect.whatsapp_instances

authenticated

SELECT

FORCE ROW LEVEL SECURITY ativo. Se location_id presente: restrito via connect.has_location_permission('viewer', …​, location_id). Se location_id IS NULL: restrito estritamente a admin (partner_admin ou org_admin).

connect.whatsapp_instances

authenticated

INSERT / UPDATE

Exige permissão admin no escopo da filial ou da organização.

connect.instances

authenticated

ALL

partner_id = (SELECT auth.current_partner_id())

connect.instance_status_ledger

service_role

ALL

Acesso restrito a workers e daemons autorizados.

connect.invitations

authenticated

SELECT / ALL

Delimitado à organização para administradores (org_admin); leitura pública permitida apenas via RPC connect.get_invitation_details.

connect.system_notifications

authenticated

SELECT

Delimitado à tupla (partner_id, organization_id) do usuário conectado. Acesso via Realtime CDC requer REPLICA IDENTITY FULL.

connect.resource_alert_states

service_role

ALL

Modificação restrita a triggers transacionais internos e workers autorizados.

connect.user_notification_dismissals

authenticated

SELECT / INSERT

user_id = auth.uid(). O operador visualiza e grava apenas suas próprias dispensas de avisos.

2. Invariante de Segurança FORCE ROW LEVEL SECURITY

As tabelas que contêm identificadores de unidade (location_id) ou instâncias de mensageria possuem compulsoriamente a flag FORCE ROW LEVEL SECURITY ativada (conforme migração 20260914183000). Essa diretiva previne que roles com permissões amplas (incluindo proprietários de tabela que não sejam superusuários) ignorem as políticas declarativas de RLS durante a execução de consultas e rotas Nitro BFF.