Laravel策略总是返回403,尽管用户角色是正确的



我正在做一个有客户和管理员的Laravel 8项目。如果管理员的角色是superadmin,则允许管理员查看ManagementController中的数据。我在我的users表上有一个role列作为enum值,并且已经注册了我的策略,但它总是返回403和我的消息,无论角色如何,我做错了什么。

我的策略是:

<?php
namespace AppPolicies;
use AppModelsUser;
use IlluminateAuthAccessHandlesAuthorization;
class ManagementPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view the model.
*
* @param  AppUser  $user
* @return mixed
*/
public function view(User $user)
{
return $user->role == 'superadmin';
}
}

已注册我的策略:

protected $policies = [
User::class => ManagementPolicy::class
];

然后在我的index函数中,我发现用户不能查看资源,只返回:

if (Auth::user()->cant('view', User::class)) {
return response()->json([
'success' => false,
'message' => 'not allowed',
'role' => Auth::user()->role
], 403);
}

听起来像是在使用策略上的自动发现,而不是使用您定义的自动发现。确保在AppServiceProvider:

中调用registerPolicies
/**
* Register any authentication / authorization services.
*
* @return void
*/
public function boot()
{
$this->registerPolicies();
}

请参阅laravel文档中的自动发现获取更多信息:https://laravel.com/docs/8.x/authorization#policy-auto-discovery