我正在使用Laravel Spatie软件包,我已经插入了我想要的所有权限和一个管理员角色。
我想做什么:
我正在尝试检查每个路由用户是否是管理员(可以做任何事情(或不是管理员并具有一定的权限。
我尝试过的:
我试图添加|
标志。
// GET ALL SEASONS
Route::get('/', 'SeasonsController@index')
-> name('index')
-> middleware(['role:admin|permission:seasons show active']);
发生了什么 VS 预期行为:
每当我使用具有seasons show active
权限的用户登录时,我都会得到403 Forbidden
.
但是,如果我删除了role:admin
则用户将获得权限。
建议仅使用权限。
向角色管理员授予所有权限(季节显示活动...等(。然后,中间件中就不需要角色:管理员了。
要授予角色管理员代码的所有权限,如下所示,应该可以完成这项工作
$permissions = SpatiePermissionModelsPermission::all()
$role = SpatiePermissionModelsRole::where('name', 'admin')->first();
// foreach on permissions
$role->givePermissionTo($permission);
// end foreach
在中间件上应用来同时使用角色和权限
//
});
Route::group(['middleware' => ['permission:publish articles|edit articles']], function () {
//
});
Route::group(['middleware' => ['role_or_permission:super-admin|edit articles']], function () {
您可以通过在构造函数中设置所需的中间件来类似地保护控制器:
{
$this->middleware(['role:super-admin','permission:publish articles|edit articles']);
}```