表格设置如下:
用户
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 access dashboard /admin2 editadmin ability to edit admins /admin/users/administrators/{ID}/edit
action_role
action_ID role_ID1 12 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('App\Models\User\Role')->withTimestamps();}
角色
/** * The actions that belong to the role. * * @return Object */public function actions() { return $this->belongsToMany('App\Models\User\Action');}/** * The users that belong to the role. * * @return Object */public function users(){ return $this->belongsToMany('App\Models\User\User');}
行动
/** * The roles that belong to the action. * * @return Object */public function roles() { return $this->belongsToMany('App\Models\User\Role');}解决方法 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();总结
以上是内存溢出为你收集整理的php – Laravel 5.1用户,角色和行动全部内容,希望文章能够帮你解决php – Laravel 5.1用户,角色和行动所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)