Mapa completo de permissões, papéis, isolamento de dados e segurança do CoreStudio. Consulte antes de implementar qualquer feature que envolva quem vê o quê.
Esta skill contém o mapeamento completo do modelo de permissões e segurança do CoreStudio. Consulte este documento antes de implementar qualquer feature que envolva acesso a dados, papéis de usuário ou visibilidade de informações.
O CoreStudio usa dois sistemas de identidade em paralelo:
| Sistema | Onde vive | Para quê |
|---|---|---|
Supabase Auth (auth.users) | Supabase | Login, JWT, sessão |
TeamMembers (teamMembers) | Banco do app | Perfil operacional, nome, cargo, equipe |
| Users (legado) | Banco do app | Tabela antiga com role: admin/user |
⚠️ Gap atual: O TeamMember e o auth.users não estão explicitamente vinculados no banco. A conexão está no campo teamMembers.userId (número inteiro que aponta para a tabela users), mas users não tem FK direto com auth.users do Supabase.
users.role)Definido na tabela users. Pouco usado atualmente.
| Valor | Significado Atual |
|---|---|
admin | Acesso irrestrito (não aplicado via middleware, ainda) |
user | Papel padrão |
sectorMembers.role)Definido na tabela sectorMembers. É o papel operacional real do CoreAct.
| Valor | Significado |
|---|---|
responsavel | Gestor do setor. Acesso total ao módulo CoreAct (conforme usePermissions). |
agente | Membro operacional. Acesso controlado por permissions JSON. |
Regra atual (linha 52-53 de
usePermissions.tsx): Se o usuário forresponsavelem qualquer setor → acesso total ao CoreAct. Se foragente→ acesso controlado pelo camposectorMembers.permissions(JSON).
PERMISSION_KEYS)Definidas em helpers/usePermissions.tsx. Controlam visibilidade de rotas e componentes.
| Chave | Módulo |
|---|---|
moduleCoreact | CoreAct |
moduleBrand | Brand Studio |
moduleMarketing | Marketing |
moduleTools | Ferramentas |
| Chave | Tela/Recurso |
|---|---|
coreactIniciativas | /coreact/iniciativas |
coreactProjetos | /coreact/projetos |
coreactEtapas | /coreact/etapas |
coreactTarefas | /coreact/tarefas |
coreactAcoes | /coreact/acoes |
coreactCronograma | /coreact/cronograma |
coreactVisaoDiaria | Visão Diária (agenda) |
coreactExecucoes | Execuções de tarefas |
coreactOrcamento | /coreact/orcamento |
coreactTime | /coreact/time |
coreactSetores | /coreact/setores |
⚠️ Status atual:
hasPermission()retornatruepara todos (linha 76 deusePermissions.tsx). As permissões estão MOCKADAS. Ninguém está bloqueado no frontend ainda.
Arquivo: server.ts (linhas 14–34)
Todas as rotas _api/coreact/* exigem token JWT válido via header Authorization: Bearer <token>.
Se inválido → 401 Unauthorized.
✅ IMPLEMENTADO — Fase 2 do plano de segurança concluída.
Status: ❌ NÃO IMPLEMENTADO
Atualmente todos os usuários autenticados veem todos os dados do banco.
Não existe filtro por sectorId, teamId ou userId nos endpoints de listagem.
O que precisa ser decidido antes de implementar:
Pergunta aberta para Gabriela: Os dados do CoreAct são compartilhados por toda a organização Adapta (modelo colaborativo), ou cada setor/usuário deve ver apenas seus próprios dados (modelo isolado/multi-tenant)?
Modelo A — Colaborativo (atual de fato):
Modelo B — Isolado por Setor:
sectorMember só vê iniciativas/projetos/tarefas do seu sectorIdlist_GET.ts + ativação de RLS no Supabaseinitiatives.sectorId → projects.initiativeId → tasks.projectIdsuperjson.parse(await request.text()) sem validação Zod antes do .schema.parse()superjson.parse() em try/catch com fallback Zod explícitouser_id ou sector_iddataUtils.ts (Esforço Baixo)toCamel, camelizeKeys) duplicadas em múltiplos endpointshelpers/dataUtils.ts (arquivo já existe mas está vazio)Setor (Sectors)
└─ SectorMembers [role: responsavel | agente] [permissions: JSON]
└─ TeamMember (quem opera)
└─ User (conta de login)
Setor
└─ Iniciativa (sectorId)
└─ Projeto (initiativeId)
├─ Tarefa (projectId)
│ ├─ TaskAction (taskId) — ações/checklists
│ ├─ TaskParticipant (taskId) — quem participa
│ └─ TaskDependency (taskId) — dependências
├─ Orçamento (projectId)
└─ Etapa/Stage (projectId)
| Item | Status |
|---|---|
| Credenciais em variáveis de ambiente | ✅ Concluído |
Middleware JWT global (_api/coreact/*) | ✅ Concluído |
| Permissões de frontend (rotas visíveis) | ⚠️ Mockadas (todo mundo vê tudo) |
| Validação de input com Zod nos endpoints | ❌ Pendente |
| Isolamento por setor/tenant | ❌ Pendente (aguarda decisão de modelo) |
| RLS no Supabase | ❌ Pendente |