Laravel 编辑政策

Laravel policy for editing

所以我创建了一个策略并在 AuthServicePROvider 中注册了它,但它总是 returns 错误。这是我第一次使用政策,所以我确定我做错了,但是按照几个例子,我没有任何效果。

我使用 ID 为 1 的用户登录。我尝试编辑 user_id 为 1、returns 为 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@edit:

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

策略实际上需要两个输入,第一个输入始终是用户 class,第二个输入是模型并且默认为模型 class。所以在你的情况下:

标签政策

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

LabelsController@edit:

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

如果您的 $this->authorize inside Controllers 总是 returns false,那么请仔细检查您的模型和模型策略命名空间是否已导入到 AuthServiceProvider 中,并且您的模型是否已导入到您的控制器中。