Laravel 策略授权的问题
Posted
技术标签:
【中文标题】Laravel 策略授权的问题【英文标题】:Problems with Laravel Policies Authorization 【发布时间】:2018-03-22 15:38:09 【问题描述】:我真的不明白发生了什么。这是我的设置和代码
在 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));
谁能帮帮我,谢谢。
【问题讨论】:
你能分享你的错误吗? @NIKHILNEDIYODATH 我已将它包含在 Controller 的索引中 【参考方案1】:尝试使用
$this->authorize('update',UserGroup::class);
而不是
$request->user()->can('update', UserGroup::class);
UPDATE:第二个参数必须是UserGroup类的实例,而不是UserGroup类本身。所以正确的代码是
$this->authorize('update',$objectOfUserGroupClass);//and not the class itself
更多信息请查看here
它对我有用....
【讨论】:
以上是关于Laravel 策略授权的问题的主要内容,如果未能解决你的问题,请参考以下文章