所以我创建了一个策略并在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;
}
答案 0 :(得分:1)
策略实际上需要两个输入,第一个输入始终是User类,第二个输入是Model,默认为Model类。所以在你的情况下:
public function edit(User $user, Label $label)
{
return $user->id === $label->user_id;
}
public function edit(Label $label)
{
$this->authorize($label);
}
答案 1 :(得分:1)
如果您在控制器内部的$ this->授权总是返回false,那么请仔细检查您的模型和模型策略命名空间是否已在AuthServiceProvider中导入,并且您的模型已导入控制器。