RBAC — Papéis e permissões
Sistema de controle de acesso baseado em roles, com 9 papéis padrão e 2 escopos (global / projeto)
Modelo de permissões
Permissões seguem o pattern recurso:ação:
compras:read,compras:managecompras_requisicao:read|write|deletecompras_cotacao:read|write|managefinanceiro:read|write|manage- etc.
Hierarquia de ações
manage ⊃ write ⊃ read
Quem tem manage tem write e read automaticamente — não precisa atribuir os 3.
Escopos
| Escopo | Significado |
|---|---|
| global | Vale para a organização inteira (ex: ver lista de fornecedores) |
| project | Vale apenas em projetos onde o usuário é membro (ex: ver requisições de uma obra) |
Papéis (roles) padrão
| Slug | Hierarquia | Acesso a projetos | Permissões típicas |
|---|---|---|---|
proprietario | 0 | Todos | Tudo |
diretor | 1 | Todos | Aprovar grandes valores, configurar alçadas, decisões finais |
gerente-projetos | 2 | Apenas membros | Aprovar RC/medições, cotar, contratar |
engenheiro | 3 | Apenas membros | Requisitar, receber, medir |
financeiro | 4 | Apenas membros | Lançar CAP, conciliar, retenções |
comercial | 5 | Apenas membros | Vendas, reservas, comissões |
juridico | 5 | Apenas membros | Contratos, aditivos > R$ 100k |
administrativo | 6 | Apenas membros | Cadastros, leitura geral |
visualizador | 7 | Apenas membros | Apenas leitura |
Regra: roles com hierarchy_level ≤ 1 (proprietário e diretor) têm acesso automático a todos os projetos da organização. Os demais precisam ser explicitamente adicionados em project_members.
Onde configurar
Settings → Acesso → Papéis e Permissões — você pode:
- Editar permissões de cada role padrão
- Criar roles customizados (ex: "Comprador Sênior" com permissões específicas)
Settings → Acesso → Usuários — adicionar usuários à organização e atribuir roles globais ou de projeto.
Verificações no código
Frontend (React):
const { hasGlobal, hasProject } = usePermissions();
if (hasGlobal("compras:read")) { /* ... */ }Backend (API routes):
ctx.requireGlobalPermission("compras_cotacao:write");
// ou
ctx.requireProjectPermission(projectId, "compras_recebimento:read");Lista completa de permissões
A lista completa fica em Settings → Acesso → Papéis e Permissões. Cada módulo lista suas permissões na própria documentação.
Por exemplo: Permissões do módulo Compras →