[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
André Cabral
Criador André Cabral 25/03/2019

Nesse cenário é possível ter um usuário com acesso a todos os posts cadastrados de todos os usuários???

Manager Carlos Ferreira 25/03/2019

Olá, André!
Tudo bem?

Você pode fazer um if para validar se o usuário é super adim (aqui depende do critério que definiu para identificar o admin) e depois disso você pode consultar os dados sem o escopo global.

Veja: https://laravel.com/docs/5.8/eloquent#query-scopes em "Removing Global Scopes"

Também dentro do próprio método boot você valida se o usuário é super admin, caso seja não aplica o scope global que filtra os registros por tenant.

Carlos Ferreira
Criador André Cabral 25/03/2019

Carlos, não consigo fazer a verificação dentro da Model no método boot

Erro: Call to a member function isAdmin() on null

    public static function boot()
    {
        parent::boot();

        $user = Auth::user()->isAdmin();

        if ($user) {
            static::addGlobalScope(new TenantScope);
        }
    }
André Cabral
Manager Carlos Ferreira 25/03/2019

O usuário está autenticado?
Talvez está usando essa lógica sem o usuário estar autenticado.

Pode usar o método check para validar isso:

if (Auth::check()) {
    // ...
}

Carlos Ferreira
Criador André Cabral 25/03/2019

Como mencionei em outro post aqui do fórum o Auth:check não funciona dentro do método static boot();

Retorna sempre null mesmo logado.

Pesquisando encontrei esse post abaixo:

 

Auth::check() is using session to check if a User is autheticated.

In Laravel the session is initialized via middleware, and all the middlewares execute after the service providers boot phase

So, in your service provider you can't access the session: it has not been initialized yet

The solution would be to check for authentication and do your work in a middleware, and let this middleware execute after this:

\Illuminate\Session\Middleware\StartSession::class

That is the middelware that starts the session

 

Porém eu não sei onde fazer esse ajuste

André Cabral
Manager Carlos Ferreira 25/03/2019

É por conta do ciclo de vida do Laravel, o método boot é chamado antes mesmo de iniciar a sessão.

Você precisa invocar o middleware que inicia a sessão antes.

Se conferir esse middleware está definido em $middlewareGroups no arquivo app/http/Kernel.php

Você precisa definir como um middleware global, em $middleware

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!