Skip to content

Permissões (RBAC) ​

O Neemias implementa controle de acesso baseado em papéis (RBAC — Role-Based Access Control) com 4 papéis integrados e 17 permissões granulares. A partir da versão v0.26.0, papéis dinâmicos podem ser criados e gerenciados via API.

O pacote @neemias/permissions é a fonte única da verdade — tanto o frontend (Vite) quanto o Worker (Wrangler) importam as definições deste pacote.

Papéis integrados ​

PapelPermissõesUso típico
ADMINTodas as 17 permissõesAdministrador do sistema
CHAMADORattendance, students.searchChamada de presença
RELATORIOSreports, students.searchConsulta de relatórios
CADASTROstudents.add, students.search, sessions.add, sessions.edit, nuclei.manage, classes.manageCadastro de alunos e gestão de turmas

Matriz de permissões ​

Attendance (Chamada) ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
attendance✅✅❌❌

Students (Alunos) ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
students.add✅❌❌✅
students.edit✅❌❌❌
students.delete✅❌❌❌
students.search✅✅✅✅

Users (Usuários) ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
users.view✅❌❌❌
users.create✅❌❌❌
users.edit✅❌❌❌
users.deactivate✅❌❌❌
users.resetPassword✅❌❌❌

Settings ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
settings✅❌❌❌

Import/Export ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
import-export✅❌❌❌

Sessions (Sessões de aula) ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
sessions.add✅❌❌✅
sessions.edit✅❌❌✅

Nuclei (Núcleos) ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
nuclei.manage✅❌❌✅

Classes (Turmas) ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
classes.manage✅❌❌✅

Reports (Relatórios) ​

PermissãoADMINCHAMADORRELATORIOSCADASTRO
reports✅❌✅❌

Papéis dinâmicos (v0.26.0+) ​

Além dos 4 papéis built-in, o sistema suporta papéis dinâmicos criados via API. Cada papel dinâmico possui:

  • name: identificador único (ex.: "SUPERVISOR")
  • displayName: nome amigável (ex.: "Supervisor Regional")
  • permissions: array de strings com as permissões concedidas
  • isSystem: false para papéis customizados (papéis built-in têm isSystem: true)

Papéis dinâmicos são gerenciados exclusivamente por usuários com permissão users.create / users.edit (ADMIN).

Schema do papel ​

ts
interface Role {
  name: string; // min 1, max 50
  displayName: string; // min 1, max 100
  permissions: string[];
  isSystem: boolean;
  createdAt: string; // ISO 8601 datetime
  updatedAt: string; // ISO 8601 datetime
}

Como adicionar um novo papel ​

Adicione uma entrada no map PERMISSIONS em packages/permissions/index.ts. O tipo UserRole é derivado automaticamente — sem definição de tipo separada para manter.

ts
export const PERMISSIONS = {
  // ... papéis existentes ...
  NOVO_PAPEL: ["attendance", "reports"],
} as const;

Fonte: packages/permissions/index.ts

Distribuído sob licença MIT.