【问题标题】:Problems with Laravel Policies AuthorizationLaravel 策略授权的问题
【发布时间】: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 的索引中

标签: php laravel policy


【解决方案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

它对我有用....

【讨论】:

    猜你喜欢
    • 2017-02-05
    • 2019-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2019-10-21
    相关资源
    最近更新 更多