我正在做一个有客户和管理员的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