Laravel策略始终返回403



所以我制定了一个策略,无论我做什么,网页都返回 403。 我对拉拉维尔很陌生,所以很可能我错过了一些:)

我做了一个模型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 = [
// 'AppModelsModel' => 'AppPoliciesModelPolicy',
exercise::class => ExercisePolicy::class,
];

在练习控制器中.php这是我使用身份验证的函数:

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

在策略中,这就是我的创建函数的样子

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

路线:

Route::get('/exercises/create', [AppHttpControllersExercisesController::class, 'create']);

我尝试放置die("策略被调用);并尝试从策略创建函数返回true以检查它是否到达该值,但它仍然返回403,在这一点上,我很确定策略本身没有被调用,因为它默认也返回403

如果有人能提前帮忙,谢谢!

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

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

虽然你应该纠正你的拼写错误并将exercise.php文件重命名为Exercise.php,将类名重命名为Exercise

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

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

我遇到了同样的问题,我了解到策略仅适用于经过身份验证的路由。

确保您的请求在实施策略时已经过身份验证。

最新更新