user.go 3.1 KB

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