Middleware, Auth e Gate
[Concluído]
Olá Carlos, tudo bem? Excelente curso. Estive há tempos procurando algo do genero e que explicasse usando o Laravel padrão e até cheguei a fazer um multitenant e multidatabase mas com algumas restrições e seu curso mostrou um caminho muito melhor.
Estou adaptando o que fiz com o que mostrou no curso e deparei com a seguinte situação. Eu tenho no sistema um ACL feito na mão (sem usar pacotes) e que uso a facade Gate dentro de AuthServiceProvider. Só que quando acesso o sistema, o AuthServiceProvider é acessado antes do TenantMiddleware e tenta acessar as tabelas relacionadas a Permissions e Roles para definir as permissões.
Eu posso mudar a ordem dos middlewares ou crio um ServiceProvider para o Gates e ele só seria ativado depois do AuthServiceProvider? Na teoria sei que funciona, mas não sei ao certo o jeito correto de fazer isso, sem parecer uma gambiarra
Olá, Fabio!
Tudo bem?
Obrigado pelo feedback amigo. Gratidão pelo seu comentário.
Ajudei um aluno com um caso semelhante. Vou te passar a solução e você me diz se te atende. Ok?
No caso do sistema o usuário podia administrar vários tenants (várias empresas). Neste caso deixamos a tabela de users no banco de dados principal, e as permissões também.
Quando o usuário se autenticava bastou criar uma sessão com as permissões daquele usuário. E por fim, basta criar o Gate que verifica se a permissão que está sendo verificada (exemplo permissão de acesso dos posts: posts_view) está na lista de permissões do usuário.
Ex:
# Model User:
public function hasPermission($permissionName)
{
$permissions = session()->get('permissions');
return in_array($permissionName, $permissions);
}
Obrigado pela resposta Carlos, vou procurar implementar com o que já tenho aqui. Do jeito que fiz no momento está no Tenant Middleware a criaçao do Gate pois após ficar na conexão do dominio do tenant já crio, mas o jeito que descreveu parece ser o mais correto.
Mas no sistema que estou desenvolvendo o usuario pertence somente a unico tenant, por isso está na tabela do mesmo as permissões.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!