Итак, я создал политику и зарегистрировал ее в AuthServicePRovider, но она всегда возвращает false. Я впервые работаю с политиками, поэтому я уверен, что делаю это неправильно, но, следуя нескольким примерам, у меня ничего не получилось.
Я вошел в систему с пользователем с идентификатором 1. Я пытаюсь отредактировать метку с идентификатором пользователя, равным 1, возвращает false, а также при попытке отредактировать метку с идентификатором пользователя, равным 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;
}
Политики ожидают фактически двух входов, первый вход всегда является классом User, второй ввод является моделью и по умолчанию равен классу модели. Итак, в вашем случае:
public function edit(User $user, Label $label)
{
return $user->id === $label->user_id;
}
public function edit(Label $label)
{
$this->authorize($label);
}
если ваш $ this-> authorize внутри Controllers всегда возвращает false, то дважды проверьте, было ли ваше пространство имен модели и политики модели импортировано в AuthServiceProvider, а также ваша модель была импортирована в ваш контроллер.