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 中,并且您的模型是否已导入到您的控制器中。
所以我创建了一个策略并在 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 中,并且您的模型是否已导入到您的控制器中。