sys_role.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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. "strings"
  10. )
  11. type RoleService struct {
  12. base.SysCommonService
  13. }
  14. // 设置用户
  15. func (s *RoleService) Set(c *gin.Context) {
  16. userId := c.GetInt64("userId")
  17. // 限制用户增加必须管理员才可以操作
  18. if userId != system2.AdminId {
  19. response.Resp(c, "不允许操作")
  20. return
  21. }
  22. type request struct {
  23. Id interface{} `json:"id"`
  24. Name string `json:"name" validate:"required"`
  25. Desc string `json:"desc" validate:"required"`
  26. Apis []interface{} `json:"apis"`
  27. Menus []interface{} `json:"menus"`
  28. }
  29. req := new(request)
  30. if err := c.BindJSON(req); err != nil {
  31. response.Resp(c, err.Error())
  32. return
  33. }
  34. id := gocast.ToInt64(req.Id)
  35. if id == system2.AdminId {
  36. response.Resp(c, "超人角色 不许乱改")
  37. return
  38. }
  39. if req.Name == "" || len(req.Apis) == 0 || len(req.Menus) == 0 || id == 0 {
  40. response.Resp(c, "用户基础信息填写不完整")
  41. return
  42. }
  43. _, ok := base.GetOne[system2.Role](s.DB(), "id", id)
  44. if !ok {
  45. response.Resp(c, "角色不存在")
  46. return
  47. }
  48. apis := make([]string, 0)
  49. if len(req.Apis) > 0 {
  50. for _, item := range req.Apis {
  51. apis = append(apis, gocast.ToString(item))
  52. }
  53. }
  54. menus := make([]string, 0)
  55. if len(req.Menus) > 0 {
  56. for _, item := range req.Menus {
  57. menus = append(menus, gocast.ToString(item))
  58. }
  59. }
  60. if err := s.DB().Model(&system2.Role{}).
  61. Where("id", id).
  62. Updates(map[string]interface{}{
  63. "name": req.Name, // 头像设置
  64. "desc": req.Desc,
  65. "apis": strings.Join(apis, ","),
  66. "menus": strings.Join(menus, ","),
  67. }).Error; err != nil {
  68. response.Resp(c, response.ResponseCodeFailure)
  69. return
  70. }
  71. response.Resp(c)
  72. return
  73. }
  74. // 创建用户
  75. func (s *RoleService) Create(c *gin.Context) {
  76. userId := c.GetInt64("userId")
  77. // 限制用户增加必须管理员才可以操作
  78. if userId != system2.AdminId {
  79. response.Resp(c, "不允许操作")
  80. return
  81. }
  82. type request struct {
  83. Name string `json:"name" validate:"required"`
  84. Desc string `json:"desc" validate:"required"`
  85. }
  86. req := new(request)
  87. if err := c.BindJSON(req); err != nil {
  88. response.Resp(c, err.Error())
  89. return
  90. }
  91. if req.Name == "" {
  92. response.Resp(c, "用户基础信息填写不完整")
  93. return
  94. }
  95. _, ok := base.GetOne[system2.Role](s.DB(), "name", req.Name)
  96. if ok {
  97. response.Resp(c, "角色已存在")
  98. return
  99. }
  100. row := &system2.Role{
  101. Name: req.Name,
  102. Desc: req.Desc,
  103. }
  104. if err := s.DB().Create(&row).Error; err != nil {
  105. response.Resp(c, err.Error())
  106. return
  107. }
  108. response.Resp(c)
  109. return
  110. }
  111. // 删除
  112. func (s *RoleService) Del(c *gin.Context) {
  113. adminID := c.GetInt64("userId")
  114. roleID := c.GetInt64("roleId")
  115. core.Log.Infof("操作用户ID:%d 角色ID:%d", adminID, roleID)
  116. if adminID != system2.AdminId {
  117. response.Resp(c, "非开发人员禁止操作")
  118. return
  119. }
  120. type request struct {
  121. Id int64 `json:"id" form:"id"`
  122. }
  123. req := new(request)
  124. if err := c.BindQuery(req); err != nil {
  125. response.Resp(c, err.Error())
  126. return
  127. }
  128. roleId := gocast.ToInt64(req.Id)
  129. if roleId == 0 {
  130. response.Resp(c, "id is zero")
  131. return
  132. }
  133. if roleId == system2.AdminId {
  134. response.Resp(c, "管理员角色禁止删除")
  135. return
  136. }
  137. // 如果存在该类型角色 不可删除
  138. if count := base.CountRow[system2.Role](s.DB(), "role_id", roleId); count > 0 {
  139. response.Resp(c, "存在该角色用户 不允许删除")
  140. return
  141. }
  142. // 先通过Id获取记录'
  143. if err := s.DB().Debug().First(&system2.Role{}, req.Id).Error; err != nil {
  144. response.Resp(c, err.Error())
  145. return
  146. }
  147. exCmd := s.DB().Where("id", req.Id).Delete(&system2.Role{})
  148. if exCmd.RowsAffected != 1 {
  149. response.Resp(c, "delete fail")
  150. return
  151. }
  152. if exCmd.Error != nil {
  153. response.Resp(c, exCmd.Error.Error())
  154. return
  155. }
  156. response.Resp(c)
  157. }
  158. func (s *RoleService) Find(c *gin.Context) {
  159. //type request[T any] struct {
  160. // base.ListRequest[T]
  161. //}
  162. //req := new(request[model.Role])
  163. //if err := c.BindQuery(req); err != nil {
  164. // response.Resp(c, err.Error())
  165. // return
  166. //}
  167. db := s.DB()
  168. roles, err := base.GetMore[system2.Role](db)
  169. if err != nil {
  170. response.Resp(c, err.Error())
  171. return
  172. }
  173. type RoleInfo struct {
  174. ID int64 `json:"id" gorm:"primarykey;comment:id"`
  175. Name string `json:"name" gorm:"column:name;type:varchar(100);comment:角色名称"`
  176. Apis []string `json:"auths" gorm:"column:apis;type:text;comment:Api权限"`
  177. Menus []string `json:"menus" gorm:"column:menus;type:text;comment:menu权限"`
  178. Desc string `json:"desc" gorm:"column:desc;type:varchar(200);comment:角色权限描述;"`
  179. }
  180. list := make([]*RoleInfo, 0)
  181. for _, item := range roles {
  182. list = append(list, &RoleInfo{
  183. ID: item.ID,
  184. Name: item.Name,
  185. Apis: strings.Split(item.Apis, ","),
  186. Menus: strings.Split(item.Menus, ","),
  187. Desc: item.Desc,
  188. })
  189. }
  190. //paging := base.NewPagination()
  191. response.Resp(c, map[string]interface{}{
  192. "list": list,
  193. //"paging": paging,
  194. })
  195. }
  196. func (s *RoleService) Get(c *gin.Context) {
  197. base.NewBaseHandler(system2.NewRole()).Get(c, s.DB())
  198. }