php – 如何根据用户在Laravel 5中的角色选择用户?
发布时间:2020-12-14 19:35:28 所属栏目:大数据 来源:网络整理
导读:从我的控制器我想选择所有具有“客户端”角色的用户. 我有一个用户模型和一个角色模型.角色属于许多用户,用户属于许多角色. 我已经建立了我的模型,并在模型实例级别有一些辅助函数来获取角色和用户 以下是用户和角色数据库模型: 应用程序/ user.php的 class
从我的控制器我想选择所有具有“客户端”角色的用户.
我有一个用户模型和一个角色模型.角色属于许多用户,用户属于许多角色. 我已经建立了我的模型,并在模型实例级别有一些辅助函数来获取角色和用户 以下是用户和角色数据库模型: 应用程序/ user.php的 class User extends Authenticatable { use Notifiable; protected $fillable = [ 'name','email','password',]; protected $hidden = [ 'password','remember_token',]; // User belongs to many roles public function roles() { return $this->belongsToMany('AppRole')->withTimestamps(); } // whitelist specific roles // reject if user does not have given roles public function authorizeRoles($roles) { if ($this->hasAnyRole($roles)) { return true; } abort(401,'This action is unauthorized.'); } // Check if a user has a role public function hasRole($role) { if ($this->roles()->where('name',$role)->first()) { return true; } return false; } // Pass in string or array to check if the user has a role public function hasAnyRole($roles) { if (is_array($roles)) { foreach ($roles as $role) { if ($this->hasRole($role)) { return true; } } } else { if ($this->hasRole($roles)) { return true; } } return false; } } 应用程序/ Role.php: class Role extends Model { public function users() { return $this->belongsToMany('AppUser')->withTimestamps(); } } 我有create_users_table,create_roles_table和create_role_user_table的数据透视表的迁移.每个角色都有一个id,名称和描述.每个用户都有一个ID,名称,电子邮件和密码. 我想过滤所有具有“客户端”角色的用户. 在我的控制器方法中,我尝试调用角色,但它不起作用,因为它是一个实例方法: // Display admin dashboard public function admin(Request $request) { // check to make sure user is an admin $request->user()->authorizeRoles('admin'); // Display all users that have the role "client" // ***** section that does not work ******** $users = User::all()->roles()->where('name','client')->get(); return view('admin',compact('users')); } 如何只使用名为“client”的角色的用户填充$users变量? 解决方法
使用
whereHas() 方法:
User::whereHas('roles',function ($q) use ($roleName) { $q->where('name',$roleName); })->get(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |