image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
André Fanelli
André Fanelli04/07/2025 00:57
Compartilhe
Savegnago - Lógica de ProgramaçãoRecomendados para vocêSavegnago - Lógica de Programação

Multi-Tenant no ASP.NET Core: Controle de acesso baseado em TenantId

    Como parte do projeto que está em desenvolvimento (portifólio pessoal), serão redigidos alguns artigos sobre tecnologias, arquiteturas e conceitos utilizados no projeto Inventarium.

    Este artigo tem como objetivo explicar uma arquitetura utilizada no projeto, que é o Multi-Tenant. A ideia de implementar essa arquitetura surgiu após avaliar a dificuldade que seria, separar, a princípio, cada empresa em um banco de dados exclusivo. Então, a melhor solução encontrada foi a utilização do TenantId para separar os ativos de inventário de cada empresa, trazendo mais segurança e escalabilidade.

    A ideia do projeto surgiu de uma necessidade em um antigo emprego, onde o inventário era feito de forma manual, preenchendo várias colunas no Excel, para diversos tipos de equipamentos. Resultado: 

    • Trabalho massante;
    • Todo ano precisava atualizar ou refazer do zero em alguns casos;
    • Planilhas que desapareciam ou acabavam corrompendo;

    

    Introdução

    Primeiramente, o que é uma aplicação Multi-Tenant?

    Bom, imagine que você é dono de um prédio com 10 apartamentos e, em algum momento, você decide alugá-los. Você terá 10 locatários morando no seu prédio. Agora, imagine que o prédio é a infraestrutura da sua aplicação e os locatários são os tenants.

    Então, basicamente os aplicativos multi-tenant são aplicações de software projetadas para atender vários locatários em uma única estrutura.

    O projeto é dividido em duas aplicações: Web e Desktop. No desktop app, é realizada apenas a inserção dos dados. Já no web app, é possível fazer o restante do CRUD e outras funções, tais como: realizar cadastro inicial do usuário, cadastrar novos usuários (Administradores ou Apenas Consulta) a partir do usuário inicial criado, exportar para Excel ou PDF (essa feature ainda está em desenvolvimento) e conseguir gerar o executável do desktop app (com o tenant do usuário logado).

    Mas, por que adotar multi-tenant? 

    Custo x benefício: é possível atender várias pessoas (ou empresas), usando uma única base de código.

    Escalabilidade: além de ser altamente escalável, podem acomodar novos locatários sem alterações significativas no ambiente.

    Flexibilidade: permite que os locatários configurem seu ambiente de acordo com suas necessidades específicas, sem afetar outros.


    Como foi implementado

    a) Adição do campo TenantId nas tabelas

    Cada entidade principal do sistema (como CadPc, CadNote, CadMonitor etc.) recebeu uma nova coluna chamada TenantId, do tipo string.

    Esse campo identifica a que empresa (tenant) aquele registro pertence.

    public class CadPc
    {
      public int Id { get; set; }
      public string Unidade { get; set; }
      public string TenantId { get; set; } // ← Aqui está o vínculo multi-tenant
      ...
    }
    

    b) Registro automático do TenantId

    Ao cadastrar novos dados, o sistema associa automaticamente o TenantId do usuário logado ao novo registro.

    c) Filtro por TenantId em todas as consultas

    Para garantir o isolamento dos dados entre empresas, todos os SELECT aplicam um filtro como:

    var tenantId = await GetTenantIdAsync();
    var registros = await _context.Computers
                  .Where(c => c.TenantId == tenantId)
                  .ToListAsync();
    

    d) Middleware para popular Claims

    Foi criado um TenantClaimsMiddleware que, ao autenticar o usuário, insere o TenantId dele como uma Claim:

    identity.AddClaim(new Claim("TenantId", user.TenantId));
    

    Assim, esse valor fica disponível globalmente em User.Claims, e não precisa mais consultar o banco toda hora.

    e) Criação de usuários filhos

    O primeiro usuário de cada empresa (tenant) é um administrador e pode cadastrar outros usuários que herdam automaticamente seu TenantId. Isso garante que todos os usuários da mesma empresa compartilhem os mesmos dados.


    Benefícios da abordagem

    • Fácil manutenção.
    • Segurança e isolamento lógico.
    • Crescimento horizontal sem replicar código.


    Dicas para quem quer aplicar

    • Crie um serviço para resolver o Tenant atual.
    • Evite duplicar lógica de filtro: centralize via Middleware ou Service.
    • Valide o TenantId na criação de registros.

    

    Conclusão

    Multi-tenant é uma arquitetura amplamente adotada no mundo da tecnologia e usada por empresas como: Salesforce, Dropbox, Microsoft (Office 365) e Zendesk.

    Com ela você elimina a necessidade de ter vários bancos de dados, o que complica a gerência, backup e desempenho. Além de aumentar a escalabilidade e flexibilidade, tornando projetos mais viáveis, principalmente nas fases iniciais.

    Essa arquitetura não é muito complexa de se aprender, pois uma vez entendendo o conceito, torna-se mais “fácil” sua aplicabilidade no projeto.

    Se gostou do conteúdo, me ajude com sugestões e dicas para melhorar meu projeto. Acredito no mundo open source.

    Compartilhe
    Recomendados para você
    Deal Group - AI Centric .NET
    Randstad - Análise de Dados
    BairesDev - Machine Learning Training
    Comentários (1)
    Carlos Barbosa
    Carlos Barbosa - 04/07/2025 01:41

    Ótimo artigo !! 🚀

    Recomendados para vocêSavegnago - Lógica de Programação