Проблемы с авторизацией политик Laravel

Я действительно не понимаю, что случилось. Вот мои настройки и код

В классе UserGroupPolicy

//Here I want to check that if $user model have group_id <= 4
//so they cannot change group_id when editing other users

public function update(User $user, UserGroup $userGroup)
{
return $user->group->id <= 4;
}

Я зарегистрировал этот класс политики в AuthService Provider

protected $policies = [
'App\User' => 'App\Policies\UserPolicy',
'App\UserGroup' => 'App\Policies\UserGroupPolicy',
'App\Team' => 'App\Policies\TeamPolicy',
'App\Branch' => 'App\Policies\BranchPolicy',
'App\Company' => 'App\Policies\CompanyPolicy',
];

Но при тестировании у меня возникает много ошибок.

В контроллере

//For testing
public function index(Request $request)
{
//If I do not pass the user instance, like Laravel official document
//It will throw: : Too few arguments to function
//App\Policies\UserGroupPolicy::update(), 1 passed in
//path\vendor\laravel\framework\src\Illuminate\Auth\Access\Gate.php
//on line 481 and exactly 2 expected

var_dump($request->user()->can('update', UserGroup::class));

//if I pass, it will always return true although I edit the update function
//in UserGroupPolicy class just return false
var_dump($request->user()->can('update', $request->user(), UserGroup::class));

}

Так что кто-нибудь может мне помочь, спасибо.

0

Решение

Попробуйте использовать

$this->authorize('update',UserGroup::class);

вместо

$request->user()->can('update', UserGroup::class);

ОБНОВИТЬ: Второй аргумент должен быть экземпляром класса UserGroup, а не самим классом UserGroup. Так что правильный код

 $this->authorize('update',$objectOfUserGroupClass);//and not the class itself

Для получения дополнительной информации проверьте Вот

Меня устраивает….

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]