[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Roberto Noya
Criador Roberto Noya 19/05/2022

Olá Carlos,

 

Tenho um sistema MULTI Tenant

 

Eu uso o TenantTrait que adiciona automaticamente o parâmetro “tenant_id = ?” nas consultas.

 

Tenho alguns “Repositories” que rodam algumas rotinas, porém por cada “Tenant” quando logado.

 

Preciso criar um “Command” agendado, onde ele irá rodar a mesma rotina porém para todos os Tenants. Como o “Repository” criado consulta o usuário logado acredito que não irá funcionar pois no Command não tem autenticação.

 

Existe de resolver isso?

 

Consigo gerar uma autenticação no command para que eu possa usar o mesmo Repository?

 

Grato!

Manager Carlos Ferreira 19/05/2022

Olá, Roberto!
Tudo bem?

Você identifica o tenant pelo usuário autenticado, certo?

Sobre o command, realmente não vai funcionar, porque usa a sessão.

Até é possível passar o usuário no loop do command:
Auth::login($user);

Mas, não seria a melhor prática.

--

O que esse command vai efetivamente fazer?
Porque dependendo, é melhor ele carregar a sua própria implementação, sem usar os recursos já prontos (scope dos models e etc), porque isso é algo bem particular do command.

Carlos Ferreira
Criador Roberto Noya 19/05/2022

Eu preciso gerar um ou mais XML para cada Tenant.

O usuario logado tem autonomia para gerar esse xml. Ocorre que as vezes, ele nao gera manualmente e portanto o sistema precisa gerar esse arquivo todos os dias pelo menos 1 vez.

Posso criar uma segunda model para mesma tabela sem usar o TenantTrait? 

Eu quero muito usar o eloquente pois existem muitos "with('')"

Eu poderia criar outro repositorio chamando outra model sem TenantTrait

Isso e viavel?

 

Roberto Noya
Criador Roberto Noya 19/05/2022

Oi Carlos,

Eu criei outra model porem SEM TenantTrait e tambem uma nova Function no repositorio que resolveu meu prolema.

Essa foi a melhor soluçāo que encontrei.

Grato

Roberto Noya
Manager Carlos Ferreira 19/05/2022

Você pode remover o global scope, e aplicar o middleware do tenant manualmente:
https://laravel.com/docs/9.x/eloquent#removing-global-scopes

Essa é uma das alternativas também.

Carlos Ferreira
Criador Roberto Noya 19/05/2022

Interessante!

Nāo conhecia esse recurso.

Grato!

Roberto Noya
Criador Roberto Noya 19/05/2022

Acabei de testar e deu certo!

Muito Obrigado!

Roberto Noya
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!