【问题标题】:How to get a list of roles with certain permission in Spatie/permission (Laravel)如何在 Spatie/permission (Laravel) 中获取具有特定权限的角色列表
【发布时间】:2019-05-24 03:35:13
【问题描述】:

我正在尝试以与获取具有特定权限的用户列表相同的方式来获取它,但是对于角色它无法正常工作

调用未定义的方法 Spatie\Permission\Models\Role::roles()

我获取具有特定角色的用户列表的方式:

$permission = $request->permission;
$usersWithPerms = User::permission($permission)->get(); 
return array("usersWithPerms"=>$usersWithPerms);

我尝试获取具有特定权限的角色的方式:

  $groupsWithPerms = Role::permission('perms_givePermToRole')->get(); 
  return array("groupsWithPerms"=>$groupsWithPerms);

BadMethodCallException 调用未定义的方法 Spatie\Permission\Models\Role::roles()

【问题讨论】:

  • 我认为你的问题是错误的,因为每个角色都有很多权限而不是相反
  • 不,没有错,因为有很多角色具有相同的权限,所以我想要一个分配了一些权限的角色列表。但我得到了它的工作。泰

标签: laravel permissions acl laravel-permission


【解决方案1】:

我唯一得到它的名字而不是具有特定权限的角色的ID:

$permission = Permission::findOrFail($request->idPermission);
$groupsWithPerms = $permission->getRoleNames();

其中:getRoleNames() 是 spatie 包中的一个方法。 所以这很好用,但你只能得到角色的名称而不是 id。

【讨论】:

    【解决方案2】:

    获取角色的权限获取权限的角色

    $permission = Permission::findOrFail(1);
    $groupsWithPerms = $permission->getRoleNames();
    //dd($groupsWithPerms);
    
    $role = Role::findOrFail(1);
    $groupsWithRoles = $role->getPermissionNames();
    //dd($groupsWithRoles);
    

    【讨论】:

      【解决方案3】:

      没有内置的快捷方式可以将它们放入包中,但查询它们很简单:

      //Eager load roles to get all data in just 1 query
      $permission = Permission::with('roles')
          ->where('name', 'perms_givePermToRole')
          ->first();
      $rolesWithPerm = $permission->roles;
      
      //or
      
      $rolesWithPerm = Role::whereHas('permissions', function($permissions){
         $permissions->where('name', 'perms_givePermToRole');
      })->get();
      

      【讨论】:

        猜你喜欢
        • 2020-05-22
        • 1970-01-01
        • 1970-01-01
        • 2019-05-26
        • 1970-01-01
        • 2021-05-29
        • 1970-01-01
        • 2020-09-14
        • 2021-05-01
        相关资源
        最近更新 更多