Multi Tenant APP
Ola pessoal tudo bem ? Estou construindo uma aplicacao e me deparei com um "problema".
Estou criando uma aplicacao multi tenant, ja implementei algo no meu trabalho, porem os nossos servicos estavam em um cluster dentro de um kubernetes, e de acordo com o usuario logado eu pego o tenatnId e carrego o DB ( Diferentes DB Connections ). Porem no caso agora estava querendo implementar multitenant com Prisma Client Extension - Row Level Security em um simples DB .
https://www.prisma.io/blog/client-extensions-preview-8t3w27xkrxxn#using-prisma-client-extensions
https://github.com/prisma/prisma-client-extensions/blob/main/row-level-security/script.ts
Na aplicacao da empresa nos estamos usando o mesmo dominio, entao cada empresa tem seu tenant DB e quando logado encontra o tenant da empresa e segue em frente. Neste caso em que estou trabalhando pretendemos usar Vercel, com subdominios. Estava pensando em pegar o host de acordo com o dominio que chega na request e verificar com o tenantId do usuario, algo do tipo:
filipe.tabnews.com.br => tenant:filipe
filipejs.tabnews.com.br/login => host => filipejs
const credentials {
email: filipe@telo.com.vc,
password: filipeS2phpDead,
}
const user = await prisma.$extends(bypassRLS()).user.findFirstOrThrow({
... prisma query object here
});
... check current host with user tenant
const companyPrisma = prisma.$extends(forCompany(user.companyId));
... continue request
Alguem implementou algo assim ? Esse sria um caminho correto ?
Links relacionados:
https://aws.amazon.com/blogs/database/multi-tenant-data-isolation-with-postgresql-row-level-security/
https://github.com/prisma/prisma-client-extensions/tree/main/row-level-security
https://www.prisma.io/blog/client-extensions-preview-8t3w27xkrxxn#example-row-level-security