目前我的数据库表定义如下:
site_roles - 包含不同的角色
site_user_roles - 将用户链接到多个角色
site_permission_modules - 包含不同的访问级别[例如。查看管理员控件,禁止用户]
site_role_permissions - 将权限模块链接到角色
我在laravel中的模型被正确定义,以查询这些多对多的关系。在代码中,我想检查用户是否有与他链接的特定权限模块。
为了更好地理解,以下是我的模型:
用户
public function SiteRoles()
{
return $this->belongsToMany('App\SiteRole', 'site_user_roles', 'users_id', 'site_roles_id');
}
SiteRole
public function Users()
{
return $this->belongsToMany('App\User', 'site_user_roles', 'site_roles_id', 'user_id');
}
public function SitePermissionModules()
{
return $this->belongsToMany('App\SitePermissionModule', 'site_role_permissions', 'site_roles_id', 'site_permission_modules_id');
}
SitePermissionModule
public function SiteRoles()
{
return $this->belongsToMany('App\SiteRole', 'site_role_permissions', 'site_permission_modules_id', 'site_roles_id');
}
以下是我目前所做的事情:
Auth::User()->SiteRoles()->with('SitePermissionModules')->get()
with()关键字检索与每个角色关联的嵌套权限数组。
我需要检查用户是否有与他链接的特定权限模块。
最好的laravel方法是什么?
编辑:
基本上我只想问什么是将多对多关系链接起来的最佳方式。
答案 0 :(得分:0)
Auth::User()->SiteRoles()->with(['SitePermissionModules' => function ($query) {
$query->where('site_role_permissions','=','admin');
//use where as per your requirment.
}])->get();