Como implementei RBAC no StockFlow
Como modelei papéis, permissões e autorização por recurso na API SaaS multiempresa do StockFlow com NestJS.
- Node.js
- TypeScript
- RBAC
- Segurança
Contexto no StockFlow
O StockFlow é uma API SaaS multiempresa para gestão de estoque. Cada empresa possui usuários com responsabilidades diferentes: administradores, operadores de estoque e visualizadores de relatórios.
RBAC (Role-Based Access Control) foi necessário para garantir que um operador não pudesse alterar configurações da empresa nem acessar dados de outro tenant.
Modelagem de papéis
Defini papéis fixos no domínio e associei permissões granulares por recurso: produtos, movimentações, usuários e auditoria.
- ADMIN: gestão completa do tenant
- MANAGER: movimentações e relatórios
- VIEWER: somente leitura
Implementação com guards no NestJS
Usei guards customizados combinados com decorators para declarar permissões nos controllers, mantendo a regra de autorização próxima da rota sem poluir a lógica de negócio.
@Roles('ADMIN', 'MANAGER')
@UseGuards(JwtAuthGuard, RolesGuard, TenantGuard)
@Post('movements')
createMovement(@Body() dto: CreateMovementDto) {
return this.movementService.create(dto);
}Isolamento multi-tenant
Cada request carrega o tenantId do token JWT. O TenantGuard valida se o recurso pertence à empresa do usuário antes de executar o service.
Essa combinação RBAC + tenant evita vazamento horizontal de dados entre empresas — requisito crítico em qualquer SaaS B2B.
Lições aprendidas
Documentar a matriz papel × permissão no README da API ajudou na revisão de segurança e na integração com o frontend Next.js do StockFlow.
RBAC bem modelado reduz ifs espalhados e facilita evoluir novos perfis sem reescrever regras de negócio.