forum icon indicating copy to clipboard operation
forum copied to clipboard

Erro com tenant scope

Open rafael-marques opened this issue 4 years ago • 6 comments

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

rafael-marques avatar Dec 08 '20 21:12 rafael-marques

Não da para realizar a lógica de checagem em um middleware?

jedsonmelo avatar Dec 09 '20 00:12 jedsonmelo

Mas aí eu poderia registrar o gate do acl em um middleware?

rafael-marques avatar Dec 09 '20 02:12 rafael-marques

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

jedsonmelo avatar Dec 09 '20 09:12 jedsonmelo

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.

rafael-marques avatar Dec 09 '20 11:12 rafael-marques

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.

jedsonmelo avatar Dec 09 '20 11:12 jedsonmelo

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.

jedsonmelo avatar Dec 09 '20 11:12 jedsonmelo