Full-stack26 de setembro de 2024

Next SaaS RBAC

Arquitetura full-stack multi-tenant de identidade, organização & permissões

Visão geral de engenharia & posicionamento

Uma aplicação full-stack multi-tenant em que autenticação, organizações, vínculos de membros, abilities associadas aos papéis, ownership de recursos, convites, projetos, faturamento e transferência de ownership são coordenados em uma arquitetura compartilhada de web e API.

Arquitetura do fluxo de dados & estados

  1. Aplicação web Next.js

    Server Actions & contexto da UI

  2. API Fastify

    Endpoints OpenAPI & guards de autenticação

  3. Pacote CASL compartilhado

    Definições unificadas de abilities

  4. Banco Prisma multi-tenant

    Organizações, papéis & ownership

Sequência de execução:Requisição do client ➔ Avaliação compartilhada de abilities CASL ➔ Verificação de vínculo no tenant ➔ Query Prisma escopada por tenant

Foco de engenharia & temas centrais

  • Autenticação, tenancy e autorização são contextos distintos e não intercambiáveis
  • Papéis pertencem a vínculos dentro de organizações, não globalmente a um usuário isolado
  • Um recurso pode pertencer simultaneamente a uma organização tenant e a um proprietário individual
  • Uma linguagem compartilhada de abilities entre a aplicação web e a API Fastify reduz divergências de autorização
  • Assentos faturáveis representam uma responsabilidade de negócio separada, com exclusão estrita de papéis

Principais trade-offs & decisões de engenharia

  • Monorepo organizado com Turborepo e pacotes compartilhados para autorização, tipos e schemas de banco de dados
  • Definições compartilhadas de permissões CASL consumidas tanto por Server Actions do Next.js quanto por endpoints do Fastify
  • Estruturação das queries principais de projetos em torno do vínculo com a organização e do contexto de ownership armazenado
  • Exclusão de papéis exclusivos de faturamento das métricas de cálculo de assentos para evitar cobranças indevidas

Evidências de implementação verificadas

  • Suporte a convites de organizações, papéis de membros e workflows de transferência de ownership
  • Comportamento de onboarding por domínio da organização e autorização de projetos sustentada por registros persistidos do proprietário
  • Autenticação dupla via credenciais de senha e integração OAuth com o GitHub

Stack tecnológica verificada

  • Workspaces Turborepo
  • Next.js App Router
  • API REST Fastify
  • Prisma ORM
  • Zod & OpenAPI
  • Pacote CASL compartilhado
  • Server Actions

Escopo do projeto

  • Foco em organização de monorepo, autenticação, organizações e vínculos de membros, convites, ownership de projetos, abilities CASL compartilhadas, queries de projetos escopadas ao tenant, separação de papéis de faturamento e transferência de ownership.