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 e updateRoles.
  • 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 ou yarn 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.