php – Laravel 5.1用户,角色和行动
发布时间:2020-12-14 19:36:52 所属栏目:大数据 来源:网络整理
导读:我正在使用Laravel 5.1创建一个包含用户,角色和操作的应用程序. 表格设置如下: 用户 id name1 John Smith2 Fred Smith 角色 id name1 Administrator2 Customer ROLE_USER user_id role_id1 12 1 行动 id name description path1 dashboard ability to acces
|
我正在使用Laravel 5.1创建一个包含用户,角色和操作的应用程序.
表格设置如下: 用户 id name 1 John Smith 2 Fred Smith 角色 id name 1 Administrator 2 Customer ROLE_USER user_id role_id 1 1 2 1 行动 id name description path
1 dashboard ability to access dashboard /admin
2 editAdmin ability to edit admins /admin/users/administrators/{id}/edit
action_role action_id role_id 1 1 2 1 用户表包含站点上的所有用户,包括管理员和客户. 角色表包含??用户可以拥有的所有可能角色.例如管理员或客户. role_user表是一个将角色与用户链接的数据透视表. 操作表列出了应用程序上可能的所有操作(即URL或路由). action_role是一个数据透视表,用于将操作与角色相关联. 总结一下: >用户有角色 我想要一个中间件设置,如果用户有权查看当前页面,它会检查页面加载.为了做到这一点,我需要能够使用如下调用来访问用户操作: $user->roles()->actions(); 如何设置我雄辩的关系来支持这种呼叫? UPDATE 我的关系在我的模型中设置如下: 用户 /**
* The roles that belong to the user.
*
* @return Object
*/
public function roles()
{
return $this->belongsToMany('AppModelsUserRole')->withTimestamps();
}
角色 /**
* The actions that belong to the role.
*
* @return Object
*/
public function actions()
{
return $this->belongsToMany('AppModelsUserAction');
}
/**
* The users that belong to the role.
*
* @return Object
*/
public function users()
{
return $this->belongsToMany('AppModelsUserUser');
}
行动 /**
* The roles that belong to the action.
*
* @return Object
*/
public function roles()
{
return $this->belongsToMany('AppModelsUserRole');
}
解决方法
Eloquent在两个数据透视表中没有HasManyThrough关系.
1.您可以通过懒惰的加载角色和操作来获取操作,然后提取它们: $actions = $user->load('roles.actions')->roles->pluck('actions')->collapse()->unique();
2.您可以使用whereHas约束直接在数据库中检查操作: $allowed = $user->roles()->whereHas('actions',function ($query) use ($action) {
$query->where('name',$action);
})->exists();
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
