[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
MarcosDisc
Criador MarcosDisc 20/03/2022

Boa tarde Carlos, tranquilo?

No curso foi demonstrado que Tenant tem vários usuário e na consulta do mesmo foi feito um filtro por scopo global, no meu senário eu modelei que um Tenant tem vário users e um User tem vário tenants... sendo assim implemente o método booted() de tenant dessa forma:

    protected static function booted()
    {
        static::addGlobalScope('ancient', function (Builder $builder) {
            $builder->users()->where('user_id', '=', Auth::user()->id);
        });
    }

porém apresenta esse erro:

BadMethodCallException

Call to undefined method Illuminate\Database\Eloquent\Builder::users()

como eu poderia implementar o método booted nesse senário?

Att.

Marcos Santos

 

 

 

 

 

 

 

 

Criador MarcosDisc 20/03/2022

Eu consegui fazer esse procesos no ClienteController assim:

    public function index()
    {
        //$clientes = $this->repository->getAllClientes();
        $user = Auth::user();
        $clientes = $user->clientes()->get();

        return View::make('Clientes.ClienteIndex', compact('clientes'));
    }

mas não conseguir usando o ClienteScope... existe ainda um segundo desafio, eu tenho que ter um segundo nível de autorização, tipo, um Cliente tem várias filiais, ou seja, tem usuário (gerente) só terá acesso a uma filial apenas, embora o cliente tenha várias filiais... eu pensei em colocar o cliente selecionado a sessão, algo do tipo Auth::user() que serviria como parâmetro limitador por consulta assim como o usuário autenticado é... mas não sei se é possível... tem alguma sugestão para esse cenário? 

Att.

Marcos Santos

 

 

 

 

MarcosDisc
Manager Carlos Ferreira 20/03/2022

Olá, Marcos!
Tudo bem?

Isso daqui não funciona, porque nem todos os models possuem este relacionamento users(), por isso o erro.

No seu caso você tem uma relação de N:N de usuários com tenants, você tem uma tabela pivô para amarrar os users com o tenants, certo?

O que você pode fazer é listar os tenants do usuário (assim que autenticar), ele escolhe um (neste momento cria a sessão com este tenant), e você usa esse tenant para aplicar o filtro:
$tenant = session()->get('tenant');
$builder->where('tenant_id', $tenant ->id);

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

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!