github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/modules/apis/version2/UserHandler.go (about)

     1  package version2
     2  
     3  import (
     4  	"github.com/insionng/yougam/helper"
     5  	"github.com/insionng/yougam/models"
     6  	"github.com/insionng/makross"
     7  	"github.com/insionng/makross/jwt"
     8  )
     9  
    10  // GetUsers
    11  func GetUsersHandler(self *makross.Context) error {
    12  
    13  	herr.Message = "ErrServiceUnavailable"
    14  	herr.Status = makross.StatusServiceUnavailable
    15  
    16  	offset := self.Args("offset").MustInt()
    17  	page := self.Args("page").MustInt64()
    18  	limit := self.Args("limit").MustInt()
    19  	field := self.Args("field").String()
    20  	role := self.Args("role").MustInt64()
    21  
    22  	if field == "lastest" {
    23  		field = "id"
    24  	} else if (field == "hotness") || (len(field) == 0) {
    25  		field = "hotness"
    26  	}
    27  
    28  	switch {
    29  	case role != 0: // 获取特定角色用户列表
    30  		if offset <= 0 {
    31  			var results_count int64
    32  			if qt, err := models.GetUsersByRole(role, 0, limit, field); err != nil {
    33  				herr.Message = err.Error()
    34  				return self.JSON(herr, makross.StatusServiceUnavailable)
    35  			} else {
    36  				results_count = int64(len(*qt))
    37  				_, _, _, _, offset_ := helper.Pages(results_count, page, int64(limit))
    38  				if objs, err := models.GetUsersByRole(role, int(offset_), limit, field); err == nil {
    39  					return self.JSON(objs)
    40  				} else {
    41  					herr.Message = err.Error()
    42  					return self.JSON(herr, makross.StatusServiceUnavailable)
    43  				}
    44  
    45  			}
    46  		} else {
    47  			if objs, err := models.GetUsersByRole(role, offset, limit, field); err == nil {
    48  				return self.JSON(objs)
    49  			} else {
    50  				herr.Message = err.Error()
    51  				return self.JSON(herr, makross.StatusServiceUnavailable)
    52  			}
    53  		}
    54  	default: // 获取全部用户列表
    55  		if offset <= 0 {
    56  			if results_count, err := models.GetUsersCount(offset, limit); err != nil {
    57  				herr.Message = err.Error()
    58  				return self.JSON(herr, makross.StatusServiceUnavailable)
    59  			} else {
    60  				_, _, _, _, offset_ := helper.Pages(results_count, page, int64(limit))
    61  				if objs, err := models.GetUsers(int(offset_), limit, field); err == nil {
    62  					return self.JSON(objs)
    63  				} else {
    64  					herr.Message = err.Error()
    65  					return self.JSON(herr, makross.StatusServiceUnavailable)
    66  				}
    67  
    68  			}
    69  		} else {
    70  			if objs, err := models.GetUsers(offset, int(limit), field); err == nil {
    71  				return self.JSON(objs)
    72  			} else {
    73  				herr.Message = err.Error()
    74  				return self.JSON(herr, makross.StatusServiceUnavailable)
    75  			}
    76  		}
    77  	}
    78  }
    79  
    80  func GetUserHandler(self *makross.Context) error {
    81  	herr.Message = "ErrServiceUnavailable"
    82  	herr.Status = makross.StatusServiceUnavailable
    83  	tid := self.Args("id").MustInt64()
    84  
    85  	if tid != 0 {
    86  		tp, err := models.GetUser(tid)
    87  		if err != nil {
    88  			herr.Message = err.Error()
    89  			return self.JSON(herr, makross.StatusServiceUnavailable)
    90  		}
    91  		return self.JSON(tp)
    92  	}
    93  	herr.Message = "没有获取到用户ID"
    94  	return self.JSON(herr, makross.StatusServiceUnavailable)
    95  }
    96  
    97  func PostUserHandler(self *makross.Context) error {
    98  	herr.Message = "ErrServiceUnavailable"
    99  	herr.Status = makross.StatusServiceUnavailable
   100  
   101  	claims := jwt.GetMapClaims(self)
   102  	var uid int64
   103  	if jwtUserId, okay := claims["UserId"].(float64); okay {
   104  		uid = int64(jwtUserId)
   105  		if uid <= 0 {
   106  			herr.Message = "尚未登录"
   107  		}
   108  	}
   109  	var isRoot bool
   110  	if jwtIsRoot, okay := claims["IsRoot"].(bool); okay {
   111  		isRoot = jwtIsRoot
   112  	} else {
   113  		herr.Message = "尚无权限"
   114  	}
   115  
   116  	var user models.User
   117  	self.Bind(&user)
   118  
   119  	if isRoot && (len(user.Username) > 0) && (len(user.Password) > 0) {
   120  
   121  		user.Password = helper.EncryptHash(user.Password, nil)
   122  		if !helper.CheckEmail(user.Email) {
   123  			user.Email = ""
   124  		}
   125  
   126  		tp, err := models.PostUser(&user)
   127  		if err != nil {
   128  			herr.Message = err.Error()
   129  			return self.JSON(err, makross.StatusServiceUnavailable)
   130  		}
   131  		return self.JSON(tp)
   132  	}
   133  	herr.Message = "没有获取到用户数据"
   134  	return self.JSON(herr, makross.StatusServiceUnavailable)
   135  }
   136  
   137  // PutUser 更新用户
   138  func PutUserHandler(self *makross.Context) error {
   139  	herr.Message = "ErrServiceUnavailable"
   140  	herr.Status = makross.StatusServiceUnavailable
   141  
   142  	claims := jwt.GetMapClaims(self)
   143  	var uid int64
   144  	if jwtUserId, okay := claims["UserId"].(float64); okay {
   145  		uid = int64(jwtUserId)
   146  		if uid <= 0 {
   147  			herr.Message = "尚未登录"
   148  		}
   149  	}
   150  	var isRoot bool
   151  	if jwtIsRoot, okay := claims["IsRoot"].(bool); okay {
   152  		isRoot = jwtIsRoot
   153  	} else {
   154  		herr.Message = "尚无权限"
   155  	}
   156  
   157  	var user models.User
   158  	self.Bind(&user)
   159  
   160  	id := self.Args("id").MustInt64()
   161  	if id <= 0 {
   162  		id = user.Id
   163  	}
   164  
   165  	var allow bool
   166  	usr, err := models.GetUser(id)
   167  	if isRoot {
   168  		allow = true
   169  	} else {
   170  		if err != nil {
   171  			herr.Message = "获取用户数据出错!"
   172  			return self.JSON(herr, makross.StatusServiceUnavailable)
   173  		}
   174  		if (uid > 0) && (usr.Id == uid) {
   175  			allow = true
   176  		} else {
   177  			herr.Message = "不是当前用户无权修改数据!"
   178  			return self.JSON(herr, makross.StatusUnauthorized)
   179  		}
   180  	}
   181  
   182  	if allow && (id > 0) {
   183  
   184  		user.Id = id
   185  		user.Password = helper.EncryptHash(user.Password, nil)
   186  		if !helper.CheckEmail(user.Email) {
   187  			user.Email = ""
   188  		}
   189  
   190  		row, err := models.PutUser(id, &user)
   191  		if (err != nil) || (row == 0) {
   192  			herr.Message = err.Error()
   193  			return self.JSON(herr, makross.StatusServiceUnavailable)
   194  		} else {
   195  			if u, e := models.GetUser(id); e != nil {
   196  				herr.Message = "获取用户数据出错!"
   197  				return self.JSON(herr, makross.StatusServiceUnavailable)
   198  			} else {
   199  				return self.JSON(u)
   200  			}
   201  		}
   202  
   203  	}
   204  
   205  	herr.Message = "没有获取到用户数据"
   206  	return self.JSON(herr, makross.StatusServiceUnavailable)
   207  }
   208  
   209  func DelUserHandler(self *makross.Context) error {
   210  	herr.Message = "ErrServiceUnavailable"
   211  	herr.Status = makross.StatusServiceUnavailable
   212  
   213  	claims := jwt.GetMapClaims(self)
   214  	var uid int64
   215  	if jwtUserId, okay := claims["UserId"].(float64); okay {
   216  		uid = int64(jwtUserId)
   217  		if uid <= 0 {
   218  			herr.Message = "尚未登录"
   219  		}
   220  	}
   221  	var isRoot bool
   222  	if jwtIsRoot, okay := claims["IsRoot"].(bool); okay {
   223  		isRoot = jwtIsRoot
   224  	} else {
   225  		herr.Message = "尚无权限"
   226  	}
   227  
   228  	id := self.Args("id").MustInt64()
   229  
   230  	if isRoot && (id > 0) {
   231  		err := models.DelUser(id, uid, -1000)
   232  		if err != nil {
   233  			herr.Message = err.Error()
   234  			return self.JSON(herr, makross.StatusServiceUnavailable)
   235  		}
   236  		herr.Message = "删除用户成功"
   237  		return self.JSON(herr)
   238  	}
   239  	herr.Message = "没有获取到用户数据"
   240  	return self.JSON(herr, makross.StatusServiceUnavailable)
   241  }