поэтому я сделал политику, и что бы я ни делал, веб-страница возвращает 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 по умолчанию
Если кто может помочь заранее спасибо!
Вызов authorize
использует второй аргумент, чтобы выяснить, какую политику использовать. Поскольку вторым аргументом является $user
, он будет искать политику для модели пользователя, которую вы не определили. Чтобы использовать политику для модели exercise
, вам нужно передать имя класса, чтобы он знал, какую политику использовать:
$this->authorize('create', exercise::class);
Хотя вам следует исправить опечатку и переименовать файл exercise.php
в Exercise.php
, а имя класса в Exercise
.
Laravel 8.x Docs - Авторизация - Написание политик - Методы без моделей
У меня была такая же проблема, и я узнал, что политики будут работать только на аутентифицированном маршруте.
Убедитесь, что ваш запрос аутентифицирован при реализации политик.
эй, у вас могут быть правила для гостей здесь.