Laravel Spatie快速加载获取所有权限

时间:2020-03-30 07:42:07

标签: laravel laravel-5 permissions spatie laravel-permission

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

$user->getAllPermissions()

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

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

但这没用。

我尝试了

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

但是查询计数与

是相同的结果
$users = user::get();

那么$user->getAllPermissions()已经渴望加载查询了吗?

还是有急切需要加载的查询?

1 个答案:

答案 0 :(得分:2)

要获得用户列表的所有许可是一件非常棘手的事情。

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

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

但是$user->getAllPermissions();函数将为您提供与用户角色和权限相关的所有权限。但是我们需要用户列表的所有许可。

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

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

现在您可以在模型中添加

protected $appends = [
    'permission'
]

现在要避免进行递归查询,请像这样编写用户查询

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

或添加您的用户模型

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

我认为这会对您有所帮助。