O cenário de uma aplicação ser multitenancy é a necessidade de atender vários clientes ao mesmo tempo.
- criar banco de dados específico para cada cliente: essa abordagem tem alguns pontos negativos, como o de aumentar a complexibilidade de alterações no schema das tabelas.
- criar um deploy para cada cliente: essa abordagem tem alguns pontos negativos, como o de aumentar a complexibilidade de deploys e monitoramento.
- criar, em cada tabela, uma coluna que referencia a qual cliente aquele registro pertence : ESSE É O CENÁRIO APRESENTADO NESTE PROJETO.
-
Pode ser criada uma entidade base, que terá essa propriedade e, todas as demais entidades herdarão dessa. Assim, quando essa entidade for mapeada para o banco, a coluna referente ao cliente estará presente. Neste exemplo, não foi criada uma entidade base, sendo assim, a propriedade ficou diretamente na própria entidade.
-
É necessário criar uma entidade que fará referência a sua tabela de clientes e, além disso, registrar os mesmos no banco de dados.
-
Quando algum usuário realizar login na sua aplicação, será necessário identificar de qual cliente ele pertence e buscar o ID deste cliente. Com o ID recuperado, pode-se adicionar essa informação na geração do token JWT e, assim, sempre que uma requisição for realizada, essa informação estará disponível para ser acessada.
-
Quando algum usuário realizar um novo request na aplicação, a sua aplicação terá acesso ao TenancyId da requisição através do JWT e, assim, deve filtrar apenas os registros daquele cliente e adicionar registros informando o cliente.