VendeeDocs
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:

  1. Uma coluna workspace_id
  2. 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 workspace
  • INSERT — So podem inserir com workspace_id valido
  • UPDATE — So podem alterar dados do seu workspace
  • DELETE — 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_id usado 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.

On this page