Muit Tenancy - Tarefas agendadas
[Finalizado Pelo Aluno]
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!
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.
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?
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
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.
Interessante!
Nāo conhecia esse recurso.
Grato!
Acabei de testar e deu certo!
Muito Obrigado!
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!