Sistema RBAC (Role-Based Access Control)

Cada usuario tem exatamente UM cargo. O cargo define suas permissoes no sistema. O Portal possui 6 cargos hierarquicos.

Cargos

CargoDescricao
MEMBROUsuario base. Pode participar de eventos, completar tarefas, comprar na loja, votar em enquetes.
LIDER_PROJETOMembro promovido para liderar um projeto especifico. Cria e valida tarefas DENTRO do seu projeto.
PORTA_VOZMembro com permissoes de comunicacao. Pode criar comunicados, enquetes, enviar emails, criar tarefas (incluindo avulsas) e usar o Assistente IA.
COORDENADORGerencia o nucleo. Cria projetos, eventos, comunicados. Aprova cadastros. Gerencia loja e financeiro. Usa IA (somente leitura).
ADMINISTRADORAcesso total ao nucleo. Tudo do Coordenador + alterar cargos, ajustar CC, configuracoes globais, acoes de escrita via IA, porta-vozes.
SUPER_ADMINAcesso irrestrito a TODOS os nucleos. Nao pertence a nenhum nucleo especifico. Pode criar nucleos, criar outros Super Admins, modo Nacional.

Matriz de Permissoes Completa

FuncionalidadeMembroLiderPorta-VozCoordAdminSuper Admin
Login / DashboardSimSimSimSimSimSim
Editar proprio perfilSimSimSimSimSimSim
Ver perfil de outrosBasicoMembros do projetoBasicoCompletoCompletoCompleto
Aprovar cadastros---SimSimSim
Alterar cargos----SimSim
Criar projetos---SimSimSim
Criar comunicados--SimSimSimSim
Criar enquetes--SimSimSimSim
Enviar emails--SimSimSimSim
Criar tarefas-No seu projetoSim (inc. avulsas)SimSimSim
Validar tarefas-No seu projeto-SimSimSim
Criar eventos---SimSimSim
Check-in em eventos---SimSimSim
Comprar na lojaSimSimSimSimSim-
Gerenciar loja---SimSimSim
Usar IA (chat) — leitura--SimSimSimSim
IA — acoes de escrita----SimSim
Ajustar saldo CC----SimSim
Lancamentos financeiros---SimSimSim
Configuracoes globais----SimSim
Gerenciar porta-vozes----SimSim
Criar nucleos-----Sim
Modo Nacional-----Sim
Relatorios globais-----Sim
Criar Super Admins-----Sim
Produtos NacionalVer/ComprarVer/ComprarVer/ComprarVer/ComprarVer/ComprarGerenciar
Comunicados NacionalVerVerVerVerVerCriar
Enquetes NacionalVotarVotarVotarVotarVotarCriar

Implementacao Tecnica

Backend (NestJS)

Guards aplicados nos controllers:

// Proteger endpoint para Coord/Admin
@UseGuards(AuthGuard, RolesGuard)
@Roles('COORDENADOR', 'ADMINISTRADOR')
@Post('approve')
approve(@Body() dto: ApproveRejectDto) { ... }

// Proteger endpoint apenas para Admin
@UseGuards(AuthGuard, RolesGuard)
@Roles('ADMINISTRADOR')
@Patch(':id/cargo')
updateCargo(...) { ... }

// Proteger endpoint para Porta-Voz, Coord e Admin
@UseGuards(AuthGuard, RolesGuard)
@Roles('PORTA_VOZ', 'COORDENADOR', 'ADMINISTRADOR')
@Post('comunicados')
createComunicado(...) { ... }

// Proteger endpoint apenas para Super Admin
@UseGuards(AuthGuard, RolesGuard)
@Roles('SUPER_ADMIN')
@Post('nucleos')
createNucleo(...) { ... }

Frontend (Next.js)

Sidebar filtra itens de menu pelo cargo do usuario:

const visibleItems = menuItems.filter(
  (item) => item.roles.includes(cargo)
);

O cargo PORTA_VOZ tem acesso aos menus de comunicacao (Comunicados, Enquetes, Emails) e ao Assistente IA, mas nao aos menus administrativos (Membros, Aprovacoes, Configuracoes).

Banco (RLS)

Row Level Security garante isolamento no nivel do banco. Mesmo que um endpoint seja acessado diretamente, o usuario so ve dados do seu nucleo.

Super Admin e Multi-tenant

O Super Admin nao tem nucleo_id fixo. Ao selecionar um nucleo no dropdown do header, o frontend envia X-Tenant-ID no header de todas as requisicoes, permitindo que o backend aplique o contexto multi-tenant correto.