[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Fabio Simões
Criador Fabio Simões 20/05/2019

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

Manager Carlos Ferreira 20/05/2019

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);
}

Carlos Ferreira
Criador Fabio Simões 20/05/2019

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.

Fabio Simões
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!