Ajuda com ACL
[Finalizado Pelo Aluno]
Boa tarde,
estou tentando implementar acl para limitar a edição do cadastro de usuarios. Gate recebe o primeiro parametro do usuario logado e o segundo parametro um model. Só que nesse caso ambos são o mesmo model. Como fazer?
Código do provider:
Gate::define('user-edit', function(User $user ){
return Auth()->user()->id === $user->id;
});
Código no metodo update do controller:
$usuario = User::find($id);
$this->authorize('user-edit', $usuario->id_);
Olá, Rodrigo!
Tudo bem?
No seu Gate você precisa passar os dois parâmetros, o primeiro sempre vai pegar o usuário autenticado.
Precisa ficar assim:
Gate::define('user-edit', function(User $userAuth, User $user){
return $userAuth->id === $user->id;
});
// usando
$this->authorize('user-edit', $idAqui);
Ola Carlos,
fiz assim e me retornou esse erro:
Argument 2 passed to App\Providers\AuthServiceProvider::App\Providers\{closure}() must be an instance of App\User, string given, called in
Olá, Rodrigo!
É porque o segundo parâmetro deve ser um objeto de User.
Ou você passa um objeto de user, ou não especifica o tipo, ex:
Gate::define('user-edit', function(User $userAuth, $user){
return $userAuth->id === $user->id;
});
Fiz assim e agora ele fala que $user nao é um objeto
Trying to get property 'id' of non-object
Parecia fácil no vídeo hehehe
Debuga isso daqui pra ver o que está chegando:
Gate::define('user-edit', function(User $userAuth, $user){
dd($userAuth);
// depois esse: dd($user);
return $userAuth->id === $user->id;
});
attributes: array:9 [▼ "id" => 24 "name" => "Rodrigo" "email" => "[email protected]" "email_verified_at" => null "password" => "$2y$10$mZdCqpqHKa1uQXjGDeNZ8e6I8aWdLzmn6CSqabwbDbF/XJ6ELwvwy" "id_emeasoft" => "cm6000028" "remember_token" => null "created_at" => "2020-02-26 11:25:23" "updated_at" => "2020-02-26 11:25:23"
"cm6000028"
Olá, Rodrigo!
Observe, no segundo parâmetro do Gate você enviou uma string, e não um objeto.
Me passa o código completo, que te ajudo a identificar onde está errado.
Se tiver passando um ID, precisa usar ele pra validar, exemplo:
Gate::define('user-edit', function(User $user, $id){
return $user->id === $id;
});
$this->authorize('user-edit', $idAqui);
Realmente Carlos, o problema era esse. Agora deu certo. Vou continuar os estudos e obrigado novamente.
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!