我有用户,角色和权限模型。用户仅与角色和角色有关系,因此用户和权限之间没有任何关联。
角色模型
public function users(){
return $this->belongsToMany('App\User', 'role_user', 'user_id', 'role_id');
}
public function permissions(){
return $this->belongsToMany('App\Permission', 'permission_role', 'permission_id', 'role_id');
}
用户模型
public function roles(){
return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id');
}
权限模式
public function roles(){
return $this->belongsToMany('App\Role', 'permission_role', 'permission_id', 'role_id');
}
所以,如果我这样做,我就能获得用户角色
$users->roles
现在,如何直接使用我的用户模型获取用户角色权限,该用户模型仅与仅与权限连接的角色和角色相关联
$users->role()->permission
答案 0 :(得分:1)
如果您只想显示用户个人资料的权限,例如,嵌套的foreach就可以解决问题:
<p class="strong">Roles:</p>
<ul class="list-group">
@foreach ($user->roles as $role)
<li class="list-unstyled">{{ Html::link(url('/roles/'.$role->id),$role->label) }}</li>
<ul class="list-group">
@foreach ($role->permissions as $permission)
<li class="list-unstyled">{{ Html::link(url('/permissions/'.$permission->id),$permission->label) }}</li>
@endforeach
</ul>
@endforeach
</ul>
答案 1 :(得分:0)
Laravel提供了hasManyThrough
方法,这正是您所需要的。 &#34; has-many-through&#34;关系提供了通过中间关系访问远程关系的便捷捷径。例如,Country模型可能通过中间User模型具有许多Post模型。借助此方法,您可以轻松收集特定国家/地区的所有博客帖子。您可以在官方文档中了解有关此关系的更多信息:
答案 2 :(得分:0)
hasManyThrough
不适用于多对多关系。您可以使用嵌套的whereHas()
来获取经过身份验证的用户的权限:
Permission::whereHas('roles', function ($q) {
$q->whereHas('users', function ($q) {
$q->where('id', auth()->id());
})
})->get();
在评论中,您已经询问过反向解决方案。如果您希望获得指定权限的所有用户,请执行以下操作:
User::whereHas('roles', function ($q) use($permissionName) {
$q->whereHas('permissions', function ($q) use($permissionName) {
$q->where('name', $permissionName);
})
})->get();