【问题标题】:Laravel policy for editingLaravel 编辑策略
【发布时间】:2016-07-30 11:28:49
【问题描述】:

所以我创建了一个策略并在 AuthServicePRvider 中注册它,但它总是返回 false。这是我第一次使用政策,所以我确信我做错了,但以下几个例子对我没有任何帮助。

我使用 id 为 1 的用户登录。我尝试编辑 user_id 为 1 的标签,返回 false,以及尝试编辑 user_id 为 2 的标签时。最后一个按预期工作,但是如果 user_id 和 label->user_id 匹配,我应该显示一个表单。相反,我每次都得到这个:

This action is unauthorized.

有什么想法吗?

AuthServiceProvider:(都试过了,但都不起作用):

protected $policies = [
    'App\Label' => 'App\Policies\LabelPolicy'
];

And this one also did not do the trick:

protected $policies = [
    Label::class => LabelPolicy::class
];

标签控制器@编辑:

public function edit(Label $label)
{
    // $this->authorize('edit', $label); // This also returns false

    if (auth()->user()->cannot('edit', $label)) {
        dd('NO'); // This is always shown
    }
}

标签政策:

public function edit(Label $label)
{
    dd('test'); // This is never shown anywhere
    return auth()->user()->id === $label->user_id;
}

【问题讨论】:

  • 我标签模型与用户模型有关系,使用它而不是直接访问user_idreturn auth()->user()->id === $label->user->id;
  • 我认为这个错误This action is unauthorized.是由于路由问题!如果您有资源控制器。能否请您添加您的路线!
  • 确实,为标签使用资源控制器:Route::resource('labels', 'LabelsController');
  • 我确实有关系,但返回 auth()->user()->id === $label->user->id;也没有用。所以我可能在某个地方还有其他问题,因为我似乎已经正确设置了所有内容,现在也要感​​谢 Mina 的回答
  • 所以当你访问 'lables/edit/some_id' 你会得到This action is unauthorized. ?

标签: php laravel policy


【解决方案1】:

策略实际上需要两个输入,第一个输入始终是 User 类,第二个输入是 Model,默认为 Model 类。所以在你的情况下:

标签政策

public function edit(User $user, Label $label)
{
    return $user->id === $label->user_id;
}

LabelsController@edit:

public function edit(Label $label)
{
    $this->authorize($label);
}

【讨论】:

  • 忘了说,这是我首先尝试的,策略中的用户 $user 对我也不起作用
  • 如果 Policy 中的 dd() 从未运行,这可能是 AuthServiceProvider 中的映射问题。您确定模型和策略类名称正确吗?
  • 正确包含命名空间,Policy文件中的命名空间也是正确的。
  • 我们开始了。骄傲的我以为我做对了,我什至检查了很多次。当然,在最后一次检查之后,我发现我的命名空间错误。现在工作正常。非常感谢
【解决方案2】:

如果你的 $this->authorize 在控制器中总是返回 false,那么仔细检查你的模型和模型策略命名空间是否被导入到 AuthServiceProvider 中,并且你的模型是否已经被导入到你的控制器中。

【讨论】:

    猜你喜欢
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多