首页 > 解决方案 > Laravel Spatie 通过 Eager Loading 获取所有权限

问题描述

大家!我正在使用 Laravel Spatie 权限包。我可以像这样获得用户的所有分配权限。

$user->getAllPermissions()

但是,我想通过急切加载获得所有权限。也许像这样。

$users = User::with('getAllPermissions')->get();

但这没有用。

我试过了

$users = user::with('permissions')->get();

但查询计数与结果相同

$users = user::get();

那么$user->getAllPermissions()已经是急切加载的查询了吗?

或者是否有任何急切加载的查询?

标签: laravellaravel-5permissionslaravel-permission

解决方案


获得用户列表的所有权限是一件非常棘手的事情。

$users = user::with('permissions')->get();

这将为用户列表提供权限模型。这样,您将仅获得分配给用户的权限。但用户有角色,则不会添加角色权限。

但是$user->getAllPermissions();功能会给你所有与用户角色和权限相关的权限。但是我们需要用户列表的所有权限。

我创建了一个 Mutators 函数来获取用户列表的权限。

public function getPermissionAttribute()
{
    return $this->getAllPermissions();
}

现在您可以在模型中附加

protected $appends = [
    'permission'
]

现在为了避免递归查询(又名 n+1 查询问题,避免为每个用户执行一个查询),像这样编写用户查询

$users = user::with(['permissions', 'roles'])->get();

或添加您的用户模型

protected $with =[
   'permissions',
    'roles'
]

我想这会对你有所帮助。


推荐阅读