Laravel编辑政策

时间:2016-07-30 11:28:49

标签: php laravel policy

所以我创建了一个策略并在AuthServicePRovider中注册了它,但它总是返回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
];

LabelsController @编辑:

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
    }
}

LabelPolicy:

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

2 个答案:

答案 0 :(得分:1)

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

LabelPolicy

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

LabelsController @编辑:

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

答案 1 :(得分:1)

如果您在控制器内部的$ this->授权总是返回false,那么请仔细检查您的模型和模型策略命名空间是否已在AuthServiceProvider中导入,并且您的模型已导入控制器。