首页 > 解决方案 > 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');
}

在政策上,这就是我的创建功能的样子

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

路线:

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

我尝试放置 die("Policy is called); 并尝试从策略创建函数中返回 true 以检查它是否到达该位置,但它仍然返回 403 ,此时我很确定策略本身不是调用,因为它也默认返回 403

如果有人可以帮助提前谢谢!

标签: laravel

解决方案


调用authorize是使用第二个参数来确定要使用的策略。由于第二个参数是$user它会寻找您尚未定义的用户模型的策略。要为exercise模型使用策略,您必须传递类名,以便它知道要使用什么策略:

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

尽管您应该更正您的拼写错误并将exercise.php文件重命名为Exercise.php并将类名重命名为Exercise.

Laravel 8.x 文档 - 授权 - 编写策略 - 没有模型的方法

Laravel 8.x 文档 - 授权 - 使用策略的授权操作 - 通过控制器助手 - 不需要模型的操作


推荐阅读