0

我正在使用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了用户获得许可。

4

2 回答 2

1

最好只使用权限。

将所有权限授予您的角色管理员(季节显示活跃......等)。那么你的中间件就不需要角色:管理员了。

要授予您的角色管理代码的所有权限,如下所示应该完成这项工作

$permissions = \Spatie\Permission\Models\Permission::all()

$role = \Spatie\Permission\Models\Role::where('name', 'admin')->first();

// foreach on permissions
 $role->givePermissionTo($permission);
// end foreach 
于 2019-06-16T10:17:49.757 回答
0

您可以通过应用中间件来同时使用角色和权限

    //
});

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']);
}```
于 2021-11-29T12:49:13.830 回答