Я создаю простой сайт электронной коммерции как личный проект.
У меня есть таблица products
, которая создает отношения между каждым продуктом, указанным пользователем.
$table->foreign('owner_id')->references('id')->on('users')->onDelete('cascade');
Отношение работает как положено, каждому продукту присваивается owner_id
, который равен идентификатору пользователя, который перечислил продукт. Я проверил базу данных в PHPMyAdmin, и она каждый раз указывает на правильного пользователя.
Я создал политику с помощью artisan и указал на нее свою модель, чтобы использовать автоматическое связывание модели маршрута
php artisan make:policy productsPolicy --model=products
public function canView(User $user, products $product)
{
return $product->owner_id == $user->id;
}
Мой AuthServiceProvider указывает на соответствующую политику
protected $policies = [
'App\Model' => 'App\Policies\productsPolicy',
];
Затем я ссылаюсь на политику в моем контроллере, чтобы только создатель мог удалить свой список
public function destroy(products $product)
{
$this->authorize('canView', $product);
$product->delete();
return redirect('/');
}
Нетнезависимо от того, вошел ли я в систему как пользователь, создавший проект, или нет, всегда выдается следующее исключение
AccessDeniedHttpException