Backend
RLS
Isolamento por workspace
Row Level Security (RLS) garante que cada workspace so acesse seus proprios dados.
Como funciona
Todas as tabelas com dados de negocio possuem:
- Uma coluna
workspace_id - Policies RLS que verificam se o usuario pertence ao workspace
get_user_workspace_ids()
Funcao SQL central que retorna os IDs de workspaces aos quais o usuario autenticado pertence:
CREATE FUNCTION get_user_workspace_ids()
RETURNS SETOF uuid AS $$
SELECT workspace_id
FROM members
WHERE user_id = auth.uid()
AND active = true
$$ LANGUAGE sql SECURITY DEFINER STABLE;Padrao de policy
Todas as tabelas seguem o mesmo padrao:
CREATE POLICY "workspace_isolation" ON deals
FOR ALL
USING (workspace_id IN (SELECT get_user_workspace_ids()));Isso garante que:
SELECT— Usuarios so veem dados do seu workspaceINSERT— So podem inserir com workspace_id validoUPDATE— So podem alterar dados do seu workspaceDELETE— So podem excluir dados do seu workspace
Multi-tenancy
O modelo multi-tenant usa workspaces como unidade de isolamento:
- Um usuario pode pertencer a multiplos workspaces via
members - Cada workspace tem seus proprios dados isolados
- A troca de workspace no frontend muda o
workspace_idusado nos hooks
O RLS e a camada de seguranca no banco. Mesmo que o frontend envie dados incorretos, o banco rejeita operacoes fora do workspace.