user.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package user_service
  2. import (
  3. "fmt"
  4. "gfast/app/model/role"
  5. "gfast/app/model/user"
  6. "gfast/app/service/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 int64) {
  17. userInfo := GetCacheAdminInfo(r)
  18. if userInfo != nil {
  19. userId = gconv.Int64(userInfo["id"])
  20. }
  21. return
  22. }
  23. //获取缓存的用户信息
  24. func GetCacheAdminInfo(r *ghttp.Request) (userInfo g.Map) {
  25. resp := boot.AdminGfToken.GetTokenData(r)
  26. userInfo = gconv.Map(resp.Get("data"))
  27. return
  28. }
  29. //获取管理员列表
  30. func GetAdminList(r *ghttp.Request, where g.Map) (page int, total int,
  31. userList []*user.Entity, err error) {
  32. userModel := user.Model
  33. if v, ok := where["keyWords"]; ok {
  34. keyWords := gconv.String(v)
  35. if keyWords != "" {
  36. keyWords = "%" + keyWords + "%"
  37. userModel = userModel.Where("user_name like ? or mobile like ? or user_nickname like ?",
  38. keyWords, keyWords, keyWords)
  39. }
  40. }
  41. total, err = userModel.Count()
  42. page, start := utils.SetPageLimit(r)
  43. userList, err = userModel.Limit(start, utils.AdminPageNum).OrderBy("id asc").All()
  44. return
  45. }
  46. //获取管理员的角色信息
  47. func GetAdminRole(userId int64) (roles []*role.Entity, err error) {
  48. enforcer, e := casbin_adapter_service.GetEnforcer()
  49. if e != nil {
  50. err = e
  51. return
  52. }
  53. //查询关联角色规则
  54. groupPolicy := enforcer.GetFilteredGroupingPolicy(0, fmt.Sprintf("u_%d", userId))
  55. if len(groupPolicy) > 0 {
  56. roleIds := make([]int64, len(groupPolicy))
  57. //得到角色id的切片
  58. for k, v := range groupPolicy {
  59. roleIds[k] = gconv.Int64(gstr.SubStr(v[1], 2))
  60. }
  61. //获取角色信息
  62. roles, err = role.Model.Where("id in(?)", roleIds).All()
  63. }
  64. return
  65. }
  66. //根据用户id获取用户信息
  67. func GetAdminInfoById(id int64) (userMap g.Map) {
  68. //获取用户角色信息
  69. if id != 0 {
  70. userInfo, err := user.Model.Where("id=?", id).One()
  71. if err != nil {
  72. g.Log().Error(err)
  73. return
  74. }
  75. userMap = gconv.Map(userInfo)
  76. }
  77. return
  78. }
  79. //获取管理员所属角色菜单
  80. func GetAdminMenusByRoleIds(roleIds []int) (menus g.List, err error) {
  81. //获取角色对应的菜单id
  82. enforcer, e := casbin_adapter_service.GetEnforcer()
  83. if e != nil {
  84. err = e
  85. return
  86. }
  87. menuIds := map[int64]int64{}
  88. for _, roleId := range roleIds {
  89. //查询当前权限
  90. gp := enforcer.GetFilteredPolicy(0, fmt.Sprintf("g_%d", roleId))
  91. for _, p := range gp {
  92. mid := gconv.Int64(gstr.SubStr(p[1], 2))
  93. menuIds[mid] = mid
  94. }
  95. }
  96. //获取所有开启的菜单
  97. err, allMenus := auth_service.GetMenuList("status=? and ismenu=?", 1, 1)
  98. if err != nil {
  99. return
  100. }
  101. roleMenus := make(g.List, 0, 100)
  102. for _, v := range allMenus {
  103. if _, ok := menuIds[gconv.Int64(v["id"])]; ok {
  104. v["index"] = v["name"]
  105. roleMenus = append(roleMenus, v)
  106. }
  107. }
  108. menus = utils.PushSonToParent(roleMenus, 0, "pid", "id", "subs", "", nil, false)
  109. return
  110. }