Sistema modular de autorização por papéis (RBAC) desenvolvido pela ANPD para projetos do Governo Federal. Desenhado para ser opt-in, reutilizável e framework-agnostic.
📊 Análise Recente (Out/2025): O projeto passou por análise técnica completa.
✅ Zero vulnerabilidades | ✅ Excelente qualidade de código | ✅ Todas as dependências funcionais
📖 Ver Relatório Completo
- Desacoplado: Core sem dependências de frameworks ou enums específicos
- Modular: Use apenas os pacotes necessários para seu projeto
- Type-Safe: Totalmente tipado com TypeScript
- Plugável: Adapters para Prisma, Next.js, React e outros
- Cacheable: Sistema de cache TTL integrado
- Auditável: Suporte nativo para logs de auditoria
@anpdgovbr/rbac-core— Tipos fundamentais e utilitários (PermissionsMap,pode,hasAny)@anpdgovbr/rbac-provider— Contratos de provider e sistema de cache TTL
@anpdgovbr/rbac-prisma— Provider Prisma com herança de perfis@anpdgovbr/rbac-next— Middleware para Next.js App Router@anpdgovbr/rbac-react— Hooks e HOCs para componentes React
@anpdgovbr/rbac-admin— Interface administrativa (WIP)
Instale apenas os pacotes necessários para seu projeto:
# Core (obrigatório)
pnpm add @anpdgovbr/rbac-core@beta
# Provider contracts e cache
pnpm add @anpdgovbr/rbac-provider@beta
# Para projetos com Prisma
pnpm add @anpdgovbr/rbac-prisma@beta
# Para APIs Next.js
pnpm add @anpdgovbr/rbac-next@beta
# Para componentes React
pnpm add @anpdgovbr/rbac-react@betaimport { createPrismaPermissionsProvider } from "@anpdgovbr/rbac-prisma"
import { withTTLCache } from "@anpdgovbr/rbac-provider"
const provider = withTTLCache(
createPrismaPermissionsProvider({ prisma }),
60_000 // cache de 1 minuto
)import { withApi } from "@anpdgovbr/rbac-next"
export const GET = withApi(
async ({ email, userId }) => {
// Sua lógica aqui
return Response.json({ data: "exemplo" })
},
{
provider,
getIdentity: myIdentityResolver,
permissao: { acao: "Exibir", recurso: "Relatorios" },
audit: myAuditLogger,
}
)import { PermissionsProvider, withPermissao } from "@anpdgovbr/rbac-react"
// No layout principal
function App() {
return (
<PermissionsProvider value={permissionsMap}>
<Dashboard />
</PermissionsProvider>
)
}
// Proteção de componente
const ProtectedReport = withPermissao(ReportComponent, "Exibir", "Relatorios")- Ação: Operação a ser realizada (
stringgenérica) - Recurso: Entidade sobre a qual a ação é executada (
stringgenérica) - Permissão: Combinação de ação + recurso + estado (permitido/negado)
- Suporte a hierarquias complexas (DAG - Directed Acyclic Graph)
- União por grant verdadeiro (se qualquer perfil ancestral permite, a permissão é concedida)
- Validação automática de perfis ativos
- Cache TTL configurável em memória
- Invalidação seletiva por identidade
- Otimizado para alta concorrência
- 📚 Consolidação de Features e Roadmap — Status por pacote (DONE/TODO com prioridades)
- 📁 examples/next-api/ — Implementação completa em Next.js
- ⚛️ examples/react/ — Componentes e hooks em React
- Core de permissões e utilitários
- Contratos de provider e cache TTL
- Provider Prisma com herança
- Middleware Next.js para APIs
- Hooks e HOCs React básicos
- Rota piloto (
GET /api/perfis)
- Consolidação de APIs públicas
- Documentação TSDoc completa
- Suite de testes abrangente
- Exemplos de integração
- Setup de CI/CD
- Publicação individual de pacotes
- Interface administrativa (
@anpdgovbr/rbac-admin) - Adapters para outros frameworks
- Métricas e observabilidade
Este é um projeto interno da ANPD, mas contribuições são bem-vindas:
- Fork o repositório
- Crie uma branch para sua feature (
git checkout -b feature/nova-funcionalidade) - Commit suas mudanças (
git commit -am 'Adiciona nova funcionalidade') - Push para a branch (
git push origin feature/nova-funcionalidade) - Abra um Pull Request
# Clone o repositório
git clone https://github.com/anpdgovbr/rbac.git
cd rbac
# Instale dependências
pnpm install
# Build todos os pacotes
pnpm run build
# Execute testes
pnpm test
# Verificar atualizações de dependências
pnpm run ncu:check
# Atualizar dependências (modo interativo)
pnpm run ncu:interactive
# Usar script helper
./scripts/ncu-helper.sh interactiveO projeto usa npm-check-updates (ncu) para gerenciar atualizações:
# Verificar atualizações em todo o monorepo
pnpm run ncu:check
# Atualizar dependências
pnpm run ncu:update
# Modo interativo (recomendado)
pnpm run ncu:interactive
# Script helper com comandos adicionais
./scripts/ncu-helper.sh helpPara detalhes de atualização de dependências, consulte os scripts ncu:* definidos em package.json.
Durante trabalho local com este repositório como submódulo (por exemplo em backlog-dim), alguns pacotes podem ser ajustados para apontar para implementações locais via file: no package.json e conter fallbacks temporários no código para facilitar testes. Essas mudanças são intencionais para o fluxo de desenvolvimento local.
Marcas a serem observadas:
- Campo
__local_dev_note__nospackage.jsonindica que o pacote está usandofile:para dependências locais. - Comentários
TODO: (TEMP)em código indicam pontos que devem ser revisados e revertidos antes da publicação.
Recomendação:
- Antes de publicar qualquer pacote, reverta os
file:para as versões publicadas e remova/ajuste os fallbacks marcados comTODO: (TEMP). - Use a branch/PR com a alteração clara e inclua uma nota no changelog sobre a reversão.
MIT © 2024 ANPD (Agência Nacional de Proteção de Dados)
Desenvolvimento: Divisão de Desenvolvimento e Sustentação de Sistemas (DDSS/CGTI/ANPD)