[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)

Dificuldade com autorização ou permissão (GATE, CAN, middleware)

[Concluído]

Ubiratan Lima
Criador Ubiratan Lima 07/02/2024

Boa noite, não estou conseguindo fazer funcionar as autorizações na rota. arquivos utilizados abaixo:

AuthServiceProvider

public function boot(): void
    {
        $this->registerPolicies();

        Gate::define('administrador', function(User $user) {
            return $user->profile=='administrador'
                ? true
                : false;
        });

        Gate::define('atendente', function(User $user) {
            return $user->profile=='atendente'
                ? true
                : false;
        });

        Gate::define('profissional', function(User $user) {

            return $user->profile=='profissional' && $user->status=='active'
                ? true
                : false;
        });
    }

 

route

Route::get('/profissionais/{id}', "$rota\UserController@show")->name('profissionais.show')->middleware('can:administrador,atendente');

 

Se eu deixo apenas um funciona, mas se separo com virgula não funciona o segundo. tentei utilizar o ->can('administrador','atendente'); e tambem não funcionou. não estou conseguindo dar a permissão correta nas rotas.

 

 

 

 

 

 

Criador Ubiratan Lima 07/02/2024

Eu encontrei uma solução para utilizar apenas um nome na diretriz CAN, não sei se é a melhor forma de fazer, mas funcionou.

nos pontos que precido do admin e do atendente eu dei a permissão do admin tambem no item do atendente, porém na validação da regra.

Se alguem tiver outra solução, eu gostaria de utilizar a forma da documentação, mas não estou conseguindo por exemplo nas rotas

->can('user1','user2');

Acredito que não tenha entendido corretamente a documentação do Authotizations.

minha solução:

Gate::define('atendente', function(User $user) {
            return $user->profile=='atendente' || $user->profile=='administrador'
                ? true
                : false;
        });

 

Fico no aguardo de alguma outra solução.

Gratidão.

Ubiratan Lima
Manager Carlos Ferreira 07/02/2024

Olá, Ubiratam!

Tudo bem?

 

Primeiro uma sugestão, pode deixar assim, vai ter o mesmo efeito e ainda vai deixar o seu código mais enxuto:

Gate::define('atendente', function(User $user) {

return $user->profile=='atendente';

});

 

Se tiver usando PHP 8, pode fazer assim:

Gate::define('atendente', fn (User $user) => $user->profile=='atendente');

 

Para usar os middlewares nas rotas, precisa fazer assim:

->middleware([

'can:administrador',

'can:atendente'

]);

Carlos Ferreira
Criador Ubiratan Lima 07/02/2024

TOP Gratidão... estava utilizando o Can errado. Gratidão... está ficando legal o sistema... mas confesso que vou precisar aplicar VUEJS para otimizar muito a velocidade. apenas de ser pequeno e rápido o sistema, com o crescimento, ele vai pesar... Ja fiz o curso do VueJS, mas vou ter que relembrar muita coisa, pois não tive muita prática...

Gratidão! Parabéns!!! Vou fazer muitos mais contigo.

Ubiratan Lima
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!