【问题标题】:Laravel Spatie middleware using role OR permissionLaravel Spatie 中间件使用角色或权限
【发布时间】:2019-06-16 10:08:29
【问题描述】:

我正在使用 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,用户将获得权限。

【问题讨论】:

    标签: php laravel laravel-permission


    【解决方案1】:

    最好只使用权限。

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

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

    $permissions = \Spatie\Permission\Models\Permission::all()
    
    $role = \Spatie\Permission\Models\Role::where('name', 'admin')->first();
    
    // foreach on permissions
     $role->givePermissionTo($permission);
    // end foreach 
    

    【讨论】:

    • 是的,我已经阅读了这方面的内容以及我的想法。有没有办法可以将所有权限分配给某个用户?我的意思是 Spatie 函数
    • $permissions = \Spatie\Permission\Models\Permission::all() $role = \Spatie\Permission\Models\Role::where('name', 'admin')->first(); // foreach on permissions $role->givePermissionTo($permission); // end foreach 应该做的工作
    • 请编辑答案,以便我接受以帮助他人
    【解决方案2】:

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

        //
    });
    
    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']);
    }```
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-01
      • 2022-10-20
      • 2020-03-31
      • 1970-01-01
      • 2019-08-06
      • 2021-05-29
      • 2021-06-29
      • 2023-01-07
      相关资源
      最近更新 更多