Postgre + Row Level Security (problemas com variavel Postgre no AdonisJS)
Estou desenvolvendo uma aplicação em nodejs (Adonis) com Postgre, onde será um multi-tenant compartilhado, ou seja, todas tabelas com uma coluna tenant_id.
Pra uma maior segurança, optei por utilizar o RLS (Row Level Security) do Postgre.
Basicamente, em toda migração eu crio uma política assim:
CREATE POLICY tenant_isolation_policy ON ${table} USING(tenant_id = current_setting('app.tenant_id')::uuid) WITH CHECK(tenant_id = current_setting('app.tenant_id')::uuid)
Tudo está funcionando bem, porém, minha dúvida é na questão de setar a variavel app.tenant_id.
Se eu utilizar um middleware pegando o módulo do Adonis Database, ficaria assim:
await Database.rawQuery(SET app.tenant_id = '${tenant_id}');
E funciona bem, porém, ao ter 2 usuários conectados em contas distintas simultaneamente, parece que eles compartilham essa mesma variável (por conta da pool da database, me aparenta que eles utilizam a mesma instância de conexão do banco ou algo do tipo).
Vocês teriam alguma ideia do que fazer?
Funcionaria se no middleware eu fizesse uma nova conexão ao banco de dados passando no nome da conexão algo relacionando ao tenant, e passasse essa variavel da conexão pra utilizar nos controllers, mas creio que essa seja uma má prática, pq ele já mantinha uma conexão anteriormente.
Agradeço <3