Политика Laravel всегда возвращает 403

поэтому я сделал политику, и что бы я ни делал, веб-страница возвращает 403. Я очень новичок в laravel, поэтому, скорее всего, я что-то упускаю :)

Я сделал модель по php artisan make:model exercise | (Я знаю, что должен писать модели с большой буквы, но это была опечатка)

Контроллер:

php artisan make:controller ExercisesController

Политика:

php artisan make:policy ExercisePolicy -m exercise

Я зарегистрировал политику в AuthServiceProvider.php (также пробовал как «App\Models\exercise» => «App\Policies\ExercisePolicy»):

 protected $policies = [
    // 'App\Models\Model' => 'App\Policies\ModelPolicy',
    exercise::class => ExercisePolicy::class,
];

В ExercisesController.php это функция, в которой я использую аутентификацию:

public function create(\App\Models\User $user)
{
    $this->authorize('create', $user);
    return view('exercises/create');
}

А в политике так выглядит моя функция create

public function create(User $user)
{
    return $user->admin == true;
}

Маршрут:

Route::get('/exercises/create', [App\Http\Controllers\ExercisesController::class, 'create']);

Я попытался поставить die("Политика вызывается); и попытался просто вернуть true из функции создания политики, чтобы проверить, дойдет ли она до этого, но все равно вернул 403 , на данный момент я почти уверен, что сама политика не выполняется. вызывается, так как он также возвращает 403 по умолчанию

Если кто может помочь заранее спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
4
0
3 043
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вызов authorize использует второй аргумент, чтобы выяснить, какую политику использовать. Поскольку вторым аргументом является $user, он будет искать политику для модели пользователя, которую вы не определили. Чтобы использовать политику для модели exercise, вам нужно передать имя класса, чтобы он знал, какую политику использовать:

$this->authorize('create', exercise::class);

Хотя вам следует исправить опечатку и переименовать файл exercise.php в Exercise.php, а имя класса в Exercise.

Laravel 8.x Docs - Авторизация - Написание политик - Методы без моделей

Документация по Laravel 8.x - Авторизация - Действия авторизации с использованием политик - Через помощники контроллера - Действия, не требующие моделей

У меня была такая же проблема, и я узнал, что политики будут работать только на аутентифицированном маршруте.

Убедитесь, что ваш запрос аутентифицирован при реализации политик.

эй, у вас могут быть правила для гостей здесь.

francisco 16.11.2021 17:08

Другие вопросы по теме