我正在使用Laravel Access Control Level (ACL)
系统。 table在哪里包含一些many to many
到关系。 User
表与belongsToMany
表有多对Role
,而Role
与belongsToMany
表则有User
相反。{{ 1}}表与Role
表具有多对多belongsToMany
关系,而Permission
与Permission
表具有多对多belongsToMany
。
我想从用户表中运行查询,以获取角色的所有权限。通过角色表将此角色分配给当前用户。
这是我的代码示例。
用户模型
Role
角色模型
public function roles()
{
return $this->belongstoMany(Role::class);
}
权限表
public function users()
{
return $this->belongsToMany(User::class);
}
public function permissions()
{
return $this->belongsToMany(Permission::class);
}
我已经尝试过使用egar加载此查询...
public function roles()
{
return $this->belongsToMany(Role::class);
}
但是总是public function hasPermission($permission)
{
if($this->roles()->with('permissions')->get()->pluck('permissions'))
{
return true;
}
return false;
}
。
答案 0 :(得分:0)
有很多方法可以检查角色之一是否已获得许可。
一个示例,将hasPermission
方法添加到User.php
模型中
public function hasPermission($permission = '') {
if ( empty($permisison) ) {
return false;
}
/*
Find all user roles that have given permission
*/
$rolesWithPermission = $this
->roles()
->whereHas('permissions', function($query) use ($permission) {
$query->where('name', $permission);
})
->get();
/*
If there is at least one role with given permission,
user has permission
*/
return $rolesWithPermission->count() > 0;
}
或者您可以在一个users
,roles
和permissions
之间进行多个联接的查询,并使用where('permissions.name', '=', $permission)
过滤结果