Permissoes (RBAC)

Permissoes nomeadas no formato dominio.recurso.acao. Default: negar tudo. Wildcard final permitido: tributos.lancamento.*.

Modelo

  • Permissao — catalogo global (codigo unico)
  • Perfil — agrega permissoes, escopado por municipio
  • Usuario — recebe perfil por secretaria

Proteger uma rota

@Get('usuarios')
@RequirePermission('core.usuario.ler')
async listar() { ... }

Revogacao (ADR 0011)

JWT carrega sv (sessionVersion) + pv[] (permissionVersion por perfil). Cada request o middleware compara contra Redis. Se versao subiu, retorna 401 e exige relogin.

Operacoes que invalidam JWTs

  • POST /auth/logout — bumpa sessionVersion do usuario
  • PUT /core/perfis/:id/permissoes — bumpa permissionVersion do perfil

REVOCATION_MODE (env)

  • fail_open — Redis offline libera request (default dev)
  • fail_closed — Redis offline retorna 503 (default prod)