Papéis e Permissões
O controle de acesso do Neemias é baseado em papéis (RBAC). A definição das permissões está em packages/permissions/index.ts — a fonte única da verdade compartilhada entre frontend e backend.
Papéis Built-in
| Papel | Permissões | Descrição |
|---|---|---|
| ADMIN | 17 | Acesso total: presença, relatórios, alunos, usuários, turmas, núcleos, configurações, importação/exportação |
| CHAMADOR | 2 | Marca presença e busca alunos |
| RELATORIOS | 2 | Visualiza relatórios e busca alunos |
| CADASTRO | 6 | Cadastra alunos, gerencia turmas, núcleos e aulas |
Nota: O papel
ADMINsempre possui todas as permissões do sistema, independentemente de alterações futuras na lista.
Lista Completa de Permissões
| # | Permissão | Descrição | ADMIN | CHAMADOR | RELATORIOS | CADASTRO |
|---|---|---|---|---|---|---|
| 1 | attendance | Marcar presença/ausência de alunos | ✅ | ✅ | ||
| 2 | reports | Acessar relatórios de frequência | ✅ | ✅ | ||
| 3 | students.add | Criar novos alunos | ✅ | ✅ | ||
| 4 | students.edit | Editar dados de alunos | ✅ | |||
| 5 | students.delete | Excluir alunos (soft-delete com justificativa) | ✅ | |||
| 6 | students.search | Buscar e listar alunos | ✅ | ✅ | ✅ | ✅ |
| 7 | users.view | Visualizar lista de usuários | ✅ | |||
| 8 | users.create | Criar novos usuários | ✅ | |||
| 9 | users.edit | Editar dados de usuários | ✅ | |||
| 10 | users.deactivate | Desativar usuários (soft-delete) | ✅ | |||
| 11 | users.resetPassword | Redefinir senha de usuários | ✅ | |||
| 12 | settings | Acessar configurações do sistema | ✅ | |||
| 13 | import-export | Importar e exportar dados | ✅ | |||
| 14 | sessions.add | Criar aulas/ocorrências de turma | ✅ | ✅ | ||
| 15 | sessions.edit | Editar aulas/ocorrências de turma | ✅ | ✅ | ||
| 16 | nuclei.manage | Criar, editar e excluir núcleos | ✅ | ✅ | ||
| 17 | classes.manage | Criar, editar e excluir turmas | ✅ | ✅ |
Papéis Dinâmicos (v0.26.0+)
A partir da versão 0.26.0, o sistema oferece suporte a papéis dinâmicos: o administrador pode criar papéis customizados com conjuntos arbitrários de permissões, além dos quatro papéis built-in. A arquitetura de permissões foi projetada para que novos papéis sejam adicionados com uma única entrada no mapa PERMISSIONS, e o tipo UserRole é derivado automaticamente — sem duplicação de definições.
Proteção em Rota
No frontend, o componente PermissionGuard envolve cada rota e verifica se o usuário logado possui a permissão necessária. No backend, o middleware de autenticação (workers/src/middleware/auth.ts) aplica a verificação de papel (role guard) em cada rota da API.
Fontes: PRD §7 · packages/permissions/index.ts