https://github.com/phellipeandrade/rbac
O projeto phellipeandrade/rbac oferece uma biblioteca leve, escalável e de alto desempenho para Controle de Acesso Baseado em Papéis Hierárquico (RBAC) no Node.js, projetada para gerenciamento granular e dinâmico de permissões em aplicações modernas.
Escrito em TypeScript, suporta diversos padrões e integrações, incluindo adaptadores para banco de dados e middlewares para frameworks populares.
Principais Recursos:
- RBAC hierárquico: Suporta herança de papéis, permitindo que papéis filhos herdem permissões dos papéis pais.
- Controle baseado em operações: Cada papel define operações permitidas explicitamente (com suporte a curingas e expressões regulares).
- Permissões granulares: Alto nível de especificidade e flexibilidade na atribuição de permissões.
- Atualizações em tempo de execução: Inclusão ou atualização de papéis durante a execução via
addRole
eupdateRoles
. - Condições personalizadas: Papéis podem incluir a propriedade
when
, com suporte a lógica síncrona, assíncrona ou baseada em Promises para verificações contextuais. - Suporte multi-tenant: Adaptadores permitem isolar definições de papéis por inquilino usando
tenantId
. - Persistência: Adaptadores opcionais para MongoDB, MySQL ou PostgreSQL permitem salvar e carregar papéis.
- Integração com middlewares: Pronto para uso no Express, NestJS e Fastify.
- Mínimas dependências e alto desempenho (benchmark acima de 70.000 operações/segundo para verificações diretas).
Uso Básico:
- Instale:
npm install @rbac/rbac
ouyarn add @rbac/rbac
- Defina papéis, operações e condições opcionais.
- Instancie o RBAC e use o método
.can()
para verificar permissões. - Integre com o middleware para proteção de rotas.
Banco de dados e Multi-Tenant:
- Use adaptadores embutidos (
MongoRoleAdapter
,MySQLRoleAdapter
,PostgresRoleAdapter
) para persistência. - Use
createTenantRBAC
para criar instâncias isoladas por inquilino.
Exemplo simplificado:
import RBAC from '@rbac/rbac';
const rbac = RBAC({ enableLogger: true })({
admin: { can: ['products:*'] },
user: { can: ['products:find'] }
});
// Verificar permissão
await rbac.can('admin', 'products:update'); // true
Middleware integrado:
import { createExpressMiddleware } from '@rbac/rbac';
app.get('/products', createExpressMiddleware(rbac)('products:find'), handler);
Recursos avançados: suporte a lógica assíncrona de permissões, atualização de papéis em tempo real e isolamento por inquilino.
Público-alvo:
- Desenvolvedores que criam aplicações seguras em Node.js e TypeScript (ou frameworks como Express, NestJS e Fastify) e precisam de um RBAC robusto, dinâmico e com baixo overhead.