user.go 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package user_service
  2. import (
  3. "fmt"
  4. "gfast/app/model/admin/role"
  5. "gfast/app/model/admin/user"
  6. "gfast/app/service/admin/auth_service"
  7. "gfast/app/service/casbin_adapter_service"
  8. "gfast/boot"
  9. "gfast/library/utils"
  10. "github.com/gogf/gf/frame/g"
  11. "github.com/gogf/gf/net/ghttp"
  12. "github.com/gogf/gf/text/gstr"
  13. "github.com/gogf/gf/util/gconv"
  14. )
  15. //获取登陆用户ID
  16. func GetLoginID(r *ghttp.Request) (userId int) {
  17. userInfo := GetLoginAdminInfo(r)
  18. if userInfo != nil {
  19. userId = userInfo.Id
  20. }
  21. return
  22. }
  23. //获取缓存的用户信息
  24. func GetLoginAdminInfo(r *ghttp.Request) (userInfo *user.Entity) {
  25. resp := boot.AdminGfToken.GetTokenData(r)
  26. gconv.Struct(resp.Get("data"), &userInfo)
  27. return
  28. }
  29. //获取管理员列表
  30. func GetAdminList(where g.Map, page int) (total int, userList []*user.Entity, err error) {
  31. userModel := user.Model
  32. if v, ok := where["keyWords"]; ok {
  33. keyWords := gconv.String(v)
  34. if keyWords != "" {
  35. keyWords = "%" + keyWords + "%"
  36. userModel = userModel.Where("user_name like ? or mobile like ? or user_nickname like ?",
  37. keyWords, keyWords, keyWords)
  38. }
  39. }
  40. total, err = userModel.Count()
  41. userList, err = userModel.ForPage(page, utils.AdminPageNum).OrderBy("id asc").All()
  42. return
  43. }
  44. //获取管理员的角色信息
  45. func GetAdminRole(userId int, allRoleList []*role.Entity) (roles []*role.Entity, err error) {
  46. roleIds, err := GetAdminRoleIds(userId)
  47. if err != nil {
  48. return
  49. }
  50. roles = make([]*role.Entity, 0, len(allRoleList))
  51. for _, v := range allRoleList {
  52. for _, id := range roleIds {
  53. if id == v.Id {
  54. roles = append(roles, v)
  55. }
  56. }
  57. }
  58. return
  59. }
  60. //获取管理员对应的角色ids
  61. func GetAdminRoleIds(userId int) (roleIds []int, err error) {
  62. enforcer, e := casbin_adapter_service.GetEnforcer()
  63. if e != nil {
  64. err = e
  65. return
  66. }
  67. //查询关联角色规则
  68. groupPolicy := enforcer.GetFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", userId))
  69. if len(groupPolicy) > 0 {
  70. roleIds = make([]int, len(groupPolicy))
  71. //得到角色id的切片
  72. for k, v := range groupPolicy {
  73. roleIds[k] = gconv.Int(gstr.SubStr(v[1], 2))
  74. }
  75. }
  76. return
  77. }
  78. //根据用户id获取用户信息
  79. func GetAdminInfoById(id int64) (userMap g.Map) {
  80. //获取用户角色信息
  81. if id != 0 {
  82. userInfo, err := user.Model.Where("id=?", id).One()
  83. if err != nil {
  84. g.Log().Error(err)
  85. return
  86. }
  87. userMap = gconv.Map(userInfo)
  88. }
  89. return
  90. }
  91. //获取菜单
  92. func GetAllMenus() (menus g.List, err error) {
  93. //获取所有开启的菜单
  94. allMenus, err := auth_service.GetIsMenuStatusList()
  95. if err != nil {
  96. return
  97. }
  98. menus = make(g.List, len(allMenus))
  99. for k, v := range allMenus {
  100. menu := gconv.Map(v)
  101. menu["index"] = v.Name
  102. menus[k] = menu
  103. }
  104. menus = utils.PushSonToParent(menus, 0, "pid", "id", "subs", "", nil, false)
  105. return
  106. }
  107. //获取管理员所属角色菜单
  108. func GetAdminMenusByRoleIds(roleIds []int) (menus g.List, err error) {
  109. //获取角色对应的菜单id
  110. enforcer, e := casbin_adapter_service.GetEnforcer()
  111. if e != nil {
  112. err = e
  113. return
  114. }
  115. menuIds := map[int64]int64{}
  116. for _, roleId := range roleIds {
  117. //查询当前权限
  118. gp := enforcer.GetFilteredPolicy(0, fmt.Sprintf("g_%d", roleId))
  119. for _, p := range gp {
  120. mid := gconv.Int64(gstr.SubStr(p[1], 2))
  121. menuIds[mid] = mid
  122. }
  123. }
  124. //获取所有开启的菜单
  125. allMenus, err := auth_service.GetIsMenuStatusList()
  126. if err != nil {
  127. return
  128. }
  129. roleMenus := make(g.List, 0, len(allMenus))
  130. for _, v := range allMenus {
  131. if _, ok := menuIds[gconv.Int64(v.Id)]; gstr.Equal(v.Condition, "nocheck") || ok {
  132. roleMenu := gconv.Map(v)
  133. roleMenu["index"] = v.Name
  134. roleMenus = append(roleMenus, roleMenu)
  135. }
  136. }
  137. menus = utils.PushSonToParent(roleMenus, 0, "pid", "id", "subs", "", nil, false)
  138. return
  139. }