Viviane.
Voltar ao blog
Segurança

Como implementei RBAC no StockFlow

Como modelei papéis, permissões e autorização por recurso na API SaaS multiempresa do StockFlow com NestJS.

8 min de leitura
  • 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.

typescript
@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.