Laravel Spatie 中间件使用角色或权限

Laravel Spatie middleware using role OR permission

我正在使用 Laravel Spatie 包并且我已经插入了我想要的所有权限和管理员角色。

What I am trying to do:

我正在尝试检查每个路由用户是否是 admin(可以做任何事情) 或者不是 admin 并且有一个一定的许可。

What I have tried:

我尝试添加|符号。

// GET ALL SEASONS
Route::get('/', 'SeasonsController@index')
            -> name('index')
            -> middleware(['role:admin|permission:seasons show active']);

What happened VS expected behavior:

每当我使用具有 seasons show active 权限的用户登录时,我都会得到 403 Forbidden.

但是如果我删除 role:admin 用户会获得权限。

最好只使用权限。

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

授予对您的角色管理员代码的所有权限,如下所示应该可以完成工作

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

$role = \Spatie\Permission\Models\Role::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']);
}```