auth_rule.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package auth_rule
  2. import (
  3. "gfast/app/service/cache_service"
  4. "gfast/library/utils"
  5. "github.com/gogf/gf/errors/gerror"
  6. "github.com/gogf/gf/frame/g"
  7. "github.com/gogf/gf/os/gtime"
  8. "github.com/gogf/gf/util/gconv"
  9. )
  10. //菜单对象
  11. type MenuReq struct {
  12. MenuType uint `p:"menuType" v:"min:0|max:2#菜单类型最小值为:min|菜单类型最大值为:max"`
  13. Pid uint `p:"parentId" v:"min:0"`
  14. Name string `p:"name" v:"required#请填写规则名称"`
  15. Title string `p:"menuName" v:"required|length:1,100#请填写标题|标题长度在:min到:max位"`
  16. Icon string `p:"icon"`
  17. Weigh int `p:"orderNum" `
  18. Condition string `p:"condition" `
  19. Remark string `p:"remark" `
  20. Status uint `p:"status" `
  21. AlwaysShow uint `p:"visible"`
  22. Path string `p:"path"`
  23. Component string `p:"component" v:"required-if:menuType,1#组件路径不能为空"`
  24. IsFrame uint `p:"is_frame"`
  25. }
  26. //获取所有菜单
  27. func GetMenuList() (list []*Entity, err error) {
  28. cache := cache_service.New()
  29. //从缓存获取
  30. iList := cache.Get(cache_service.AdminAuthMenu)
  31. if iList != nil {
  32. list = iList.([]*Entity)
  33. return
  34. }
  35. //从数据库获取
  36. list, err = Model.Order("weigh desc,id asc").FindAll()
  37. if err != nil {
  38. return
  39. }
  40. //缓存菜单
  41. cache.Set(cache_service.AdminAuthMenu, list, 0, cache_service.AdminAuthTag)
  42. return
  43. }
  44. //检查菜单规则是否存在
  45. func CheckMenuNameUnique(name string, id int) bool {
  46. model := Model.Where("name=?", name)
  47. if id != 0 {
  48. model = model.And("id!=?", id)
  49. }
  50. c, err := model.Count()
  51. if err != nil {
  52. g.Log().Error(err)
  53. return false
  54. }
  55. return c == 0
  56. }
  57. //检查菜单路由地址是否已经存在
  58. func CheckMenuPathUnique(path string, id int) bool {
  59. model := Model.Where("path=?", path).Where("menu_type<>?", 2)
  60. if id != 0 {
  61. model = model.And("id!=?", id)
  62. }
  63. c, err := model.Count()
  64. if err != nil {
  65. g.Log().Error(err)
  66. return false
  67. }
  68. return c == 0
  69. }
  70. // 添加菜单操作
  71. func Add(req *MenuReq) (err error, insertId int64) {
  72. if req == nil {
  73. err = gerror.New("参数错误")
  74. return
  75. }
  76. now := gtime.Timestamp()
  77. entity := new(Entity)
  78. entity.Title = req.Title
  79. entity.Status = req.Status
  80. entity.MenuType = req.MenuType
  81. entity.Path = req.Path
  82. entity.Component = req.Component
  83. entity.AlwaysShow = req.AlwaysShow
  84. entity.Icon = req.Icon
  85. entity.Name = req.Name
  86. entity.IsFrame = req.IsFrame
  87. entity.Pid = req.Pid
  88. entity.Createtime = gconv.Uint(now)
  89. entity.Updatetime = gconv.Uint(now)
  90. entity.Weigh = req.Weigh
  91. res, e := entity.Insert()
  92. err = e
  93. if err != nil {
  94. return
  95. }
  96. insertId, err = res.LastInsertId()
  97. return
  98. }
  99. //修改菜单操作
  100. func Edit(req *MenuReq, id int) (err error, rows int64) {
  101. var entity *Entity
  102. entity, err = Model.FindOne(id)
  103. if err != nil {
  104. return
  105. }
  106. now := gtime.Timestamp()
  107. entity.Updatetime = gconv.Uint(now)
  108. entity.Title = req.Title
  109. entity.Status = req.Status
  110. entity.MenuType = req.MenuType
  111. entity.Path = req.Path
  112. entity.Component = req.Component
  113. entity.AlwaysShow = req.AlwaysShow
  114. entity.Icon = req.Icon
  115. entity.Name = req.Name
  116. entity.IsFrame = req.IsFrame
  117. entity.Pid = req.Pid
  118. entity.Weigh = req.Weigh
  119. res, e := Model.Save(entity)
  120. err = e
  121. if err != nil {
  122. return
  123. }
  124. rows, err = res.RowsAffected()
  125. return
  126. }
  127. //删除菜单
  128. func DeleteByIds(ids []int) (err error) {
  129. //获取菜单数据
  130. menus, err := GetMenuList()
  131. if err != nil {
  132. return
  133. }
  134. menuList := gconv.SliceMap(menus)
  135. son := make(g.List, 0, len(menuList))
  136. for _, id := range ids {
  137. son = append(son, utils.FindSonByParentId(menuList, id, "pid", "id")...)
  138. }
  139. for _, v := range son {
  140. ids = append(ids, gconv.Int(v["id"]))
  141. }
  142. _, err = Model.Where("id in (?)", ids).Delete()
  143. return
  144. }
  145. type ReqSearch struct {
  146. Status string `p:"status" `
  147. Title string `p:"menuName" `
  148. }