【发布时间】:2019-01-08 06:08:31
【问题描述】:
我正在开发 Laravel Access Control Level (ACL) 系统。表在哪里包含一些many to many 关系。 User 表具有多对多 belongsToMany 和 Role 表,反之多对多 Role 具有 belongsToMany 和 User 表。同样,Role 表具有多对多 belongsToMany 与 @ 的关系987654332@ 表和相反的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);
}
权限表
public function roles()
{
return $this->belongsToMany(Role::class);
}
我已经使用 egar loading 尝试过这个查询...
public function hasPermission($permission)
{
if($this->roles()->with('permissions')->get()->pluck('permissions'))
{
return true;
}
return false;
}
但它总是return false。
【问题讨论】:
-
你试过
dd( $this->roles()->with('permissions')->get() )吗?此外,在相同的方法中,您永远不会使用$permission变量 -
是的,它显示了一个集合
-
是空集合吗?如果有角色,你能检查这些角色是否有任何权限吗?或者将
dd()的值添加到问题中 -
$data=Auth::user()->roles()->with('permissions')->get()->pluck('permissions');这会返回一个集合。但是现在如果我想添加 where 条件我该怎么做? -
可以用
filter()method过滤掉结果集合。