forum
forum copied to clipboard
Erro com tenant scope
Descrição Geral do Problema
Problema Encontrado
Pessoal, tudo joia? Tenho um scope que faz uma verificação se o usuário está logado e aplica a parte de separaçãod e tenant. Porém ao tentar implementar um ACL, ele retorna erro porque o usuário ainda não está logado quando verificamos dentro de AuthServiceProvider.php. Teria alguma forma de contornar isso?
Abordagem
Tentei usar Auth::check
, ou injetar usuário no boot mas não resolveu
Não da para realizar a lógica de checagem em um middleware?
Mas aí eu poderia registrar o gate do acl em um middleware?
Hm, não entendi que você tava registrando um gate, o closure
do Gate::define()
recebe o usuário logado. Então é só você checar se essa variável está null
, se tiver null
é porque o usuário não está logado.
https://laravel.com/docs/6.x/authorization#gates
Entendi, mas de fato o usuário já está logado. Lendo um pouco aqui, descobri que os providers executam primeiro e mesmo que o usuário esteja logado, dentro do arquivo AuthServiceProvider.php
ainda não terá essa info.
Sim, no AuthServiceProvider não há a possibilidade de utilizar o Auth::check()
, mas a closure do gate só é executada quando o gate é chamado e como os gates são chamados geralmente em middlewares ou controllers, o usuário logado estará presente sem problemas.
Pro caso de separação do tenant, se precisa saber se o cara está logado ou algo do tipo, acho que o mais indicado será colocar em um middleware global. Acredito que dessa forma você garante que a aplicação já subiu/injetou todas as dependências e tbm garante que a lógica do tentant é executado em todas as requisições.