Files
adaptador-planilhas/docs/spreadsheet-adapter/02-auth-workspace-permissions.md
T
camilafagundesandCursor 6e23f1533b Implementa o MVP do Adaptador de Planilhas no Elo Pro.
O módulo usa a identidade Supabase, isola cada workspace e registra storage, TTL, runner e biblioteca XLSX como decisões ainda abertas.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-02 23:02:00 -03:00

1.9 KiB

Autenticação, workspace, permissões e RLS

Fluxo

  1. Supabase Auth (getUser) quando NEXT_PUBLIC_SUPABASE_URL e a anon key existem.
  2. Workspace ativo no cookie elo_pro_workspace_id, validado contra workspace_members.
  3. Fora de produção, ADAPTER_DEV_AUTH=1 aceita um cookie assinado sem senha, só para identidades já existentes no banco.
  4. A flag workspace_module_flags.module_key = spreadsheet_adapter precisa estar ligada.
  5. Logout chama supabase.auth.signOut() e apaga o cookie local de desenvolvimento.
  6. src/proxy.ts só redireciona quem não tem cookie de sessão. A autorização real continua no servidor.

Não existe formulário de senha, tabela de credencial ou refresh token do Adaptador. Superadmin (profiles.is_superadmin) não ganha bypass dentro do módulo.

Fonte do workspace

O identificador vem do cookie de plataforma ou da sessão de desenvolvimento. Consultas usam o valor já validado no servidor. Payload do browser não escolhe o tenant.

Matriz

Ação Owner/Admin Gestor/Agent
Usar módulo habilitado Sim Sim
Operar fonte, mapa, prévia, processo e download Sim Sim
Enviar modelo Sim Só se allow_non_admin_model_upload
Excluir modelo e alterar a flag de upload Sim Não

RLS

migrations/0003_rls.sql liga e força RLS. O aplicativo faz set local role app_user e app.user_id. Funções security definer resolvem membership, flag, upload e job ativo sem vazamento entre workspaces. A conexão de serviço (worker, seed, flag, limpeza) não passa por app_user e permanece só no servidor.

Testes

tests/integration/rls.test.ts cobre leitura/escrita cruzada, insert bloqueado por RLS, flag desligada mesmo com contexto mentiroso e agent impedido de gravar settings. tests/integration/journey.test.ts cobre agent sem upload, upload após a setting e exclusão negada.