sys_user.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. package system
  2. import (
  3. "github.com/demdxx/gocast"
  4. "github.com/gin-gonic/gin"
  5. "go_server/base/core"
  6. "go_server/model/common/response"
  7. system2 "go_server/model/system"
  8. "go_server/service/base"
  9. )
  10. type UserService struct {
  11. base.SysCommonService
  12. }
  13. func (s *UserService) Logs(c *gin.Context) {
  14. base.NewBaseHandler(system2.NewAdministratorLog()).List(c, s.DB())
  15. }
  16. // 获取用户列表
  17. func (s *UserService) Find(c *gin.Context) {
  18. db := s.DB()
  19. users, err := base.GetMore[system2.Administrator](db)
  20. if err != nil {
  21. response.Resp(c, err.Error())
  22. return
  23. }
  24. //type RoleInfo struct {
  25. // ID int64 `json:"id" gorm:"primarykey;comment:id"`
  26. // Name string `json:"name" gorm:"column:name;type:varchar(100);comment:角色名称"`
  27. // Apis []string `json:"auths" gorm:"column:apis;type:text;comment:Api权限"`
  28. // Menus []string `json:"menus" gorm:"column:menus;type:text;comment:menu权限"`
  29. // Desc string `json:"desc" gorm:"column:desc;type:varchar(200);comment:角色权限描述;"`
  30. //}
  31. //list := make([]*RoleInfo, 0)
  32. //for _, item := range roles {
  33. // list = append(list, &RoleInfo{
  34. // ID: item.ID,
  35. // Name: item.Name,
  36. // Apis: strings.Split(item.Apis, ","),
  37. // Menus: strings.Split(item.Menus, ","),
  38. // Desc: item.Desc,
  39. // })
  40. //}
  41. //paging := base.NewPagination()
  42. response.Resp(c, map[string]interface{}{
  43. "list": users,
  44. //"paging": paging,
  45. })
  46. //base.NewBaseHandler(model.NewAdministrator()).List(c, s.DB())
  47. }
  48. // 查看用户详情
  49. func (s *UserService) Get(c *gin.Context) {
  50. base.NewBaseHandler(system2.NewAdministrator()).Get(c, s.DB())
  51. }
  52. // 设置用户
  53. func (s *UserService) SetUser(c *gin.Context) {
  54. userId := c.GetInt64("userId")
  55. // 限制用户增加必须管理员才可以操作
  56. if userId != system2.AdminId {
  57. response.Resp(c, "不允许操作")
  58. return
  59. }
  60. type request struct {
  61. UserId interface{} `json:"userId"`
  62. Avatar string `json:"avatar"`
  63. Nickname string `json:"nickname"`
  64. Password string `json:"password"`
  65. Lock interface{} `json:"lock"`
  66. ResetGoogleKey interface{} `json:"resetGoogleKey"`
  67. }
  68. req := new(request)
  69. if err := c.BindJSON(req); err != nil {
  70. response.Resp(c, err.Error())
  71. return
  72. }
  73. user, ok := base.GetOne[system2.Administrator](s.DB(), "id", req.UserId)
  74. if !ok {
  75. response.Resp(c, response.ResponseCodeFailure)
  76. return
  77. }
  78. if req.Avatar != "" {
  79. user.Avatar = req.Avatar
  80. }
  81. if req.Nickname != "" {
  82. user.Nickname = req.Nickname
  83. }
  84. if req.Password != "" {
  85. user.Password, user.Salt = user.EncodePassword(req.Password)
  86. }
  87. resetGoogleKey := gocast.ToBool(req.ResetGoogleKey)
  88. if user.GoogleKey != "" && resetGoogleKey {
  89. user.GoogleKey = ""
  90. }
  91. if req.Lock != nil {
  92. user.Lock = gocast.ToBool(req.Lock)
  93. }
  94. if err := s.DB().Model(&system2.Administrator{}).
  95. Where("id", user.ID).
  96. Updates(map[string]interface{}{
  97. "avatar": user.Avatar, // 头像设置
  98. "nickname": user.Nickname,
  99. "password": user.Password,
  100. "salt": user.Salt,
  101. "google_key": user.GoogleKey,
  102. "lock": user.Lock,
  103. }).Error; err != nil {
  104. response.Resp(c, response.ResponseCodeFailure)
  105. return
  106. }
  107. response.Resp(c)
  108. return
  109. }
  110. // 创建用户
  111. func (s *UserService) Create(c *gin.Context) {
  112. userId := c.GetInt64("userId")
  113. // 限制用户增加必须管理员才可以操作
  114. if userId != system2.AdminId {
  115. response.Resp(c, "不允许操作")
  116. return
  117. }
  118. type request struct {
  119. Avatar string `json:"avatar"`
  120. Username string `json:"username"`
  121. Nickname string `json:"nickname"`
  122. Password string `json:"password"`
  123. RoleId interface{} `json:"roleId"`
  124. }
  125. req := new(request)
  126. if err := c.BindJSON(req); err != nil {
  127. response.Resp(c, err.Error())
  128. return
  129. }
  130. roleId := gocast.ToInt64(req.RoleId)
  131. if req.Username == "" || req.Nickname == "" || req.Password == "" || roleId == 0 {
  132. response.Resp(c, "用户基础信息填写不完整")
  133. return
  134. }
  135. if len(req.Password) < 6 {
  136. response.Resp(c, "密码长度不得小与6位数")
  137. return
  138. }
  139. _, ok := base.GetOne[system2.Role](s.DB(), "id", roleId)
  140. if !ok {
  141. response.Resp(c, "角色信息不存在")
  142. return
  143. }
  144. _, ok = base.GetOne[system2.Administrator](s.DB(), "username", req.Username)
  145. if ok {
  146. response.Resp(c, "用户已存在请更好用户名")
  147. return
  148. }
  149. row := &system2.Administrator{
  150. Nickname: req.Nickname,
  151. Username: req.Username,
  152. RoleId: roleId,
  153. }
  154. row.Password, row.Salt = row.EncodePassword(req.Password)
  155. if err := s.DB().Create(&row).Error; err != nil {
  156. response.Resp(c, err.Error())
  157. return
  158. }
  159. response.Resp(c)
  160. return
  161. }
  162. // 删除用户
  163. func (s *UserService) Del(c *gin.Context) {
  164. adminID := c.GetInt64("userId")
  165. roleID := c.GetInt64("roleId")
  166. core.Log.Infof("操作用户ID:%d 角色ID:%d", adminID, roleID)
  167. if adminID != system2.AdminId {
  168. response.Resp(c, "非技术人员禁止操作")
  169. return
  170. }
  171. type request struct {
  172. Id interface{} `json:"id" form:"id"`
  173. }
  174. req := new(request)
  175. if err := c.BindQuery(req); err != nil {
  176. response.Resp(c, err.Error())
  177. return
  178. }
  179. userID := gocast.ToInt64(req.Id)
  180. if userID == 0 {
  181. response.Resp(c, "id is zero")
  182. return
  183. }
  184. if userID == system2.AdminId {
  185. response.Resp(c, "ROOT账号禁止删除")
  186. return
  187. }
  188. // 先通过Id获取记录'
  189. if err := s.DB().Debug().First(&system2.Administrator{}, req.Id).Error; err != nil {
  190. response.Resp(c, err.Error())
  191. return
  192. }
  193. exCmd := s.DB().Where("id", req.Id).Delete(&system2.Administrator{})
  194. if exCmd.RowsAffected != 1 {
  195. response.Resp(c, "delete fail")
  196. return
  197. }
  198. if exCmd.Error != nil {
  199. response.Resp(c, exCmd.Error.Error())
  200. return
  201. }
  202. response.Resp(c)
  203. }