加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读