system_permissions.go 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. package backend
  2. import (
  3. "context"
  4. "kpt-tmr-group/model"
  5. "kpt-tmr-group/pkg/logger/zaplog"
  6. "kpt-tmr-group/pkg/xerr"
  7. operationPb "kpt-tmr-group/proto/go/backend/operation"
  8. "net/http"
  9. "sync"
  10. "time"
  11. "go.uber.org/zap"
  12. )
  13. type SystemAllPermissionsList struct {
  14. PastureList []*model.SystemGroupPasturePermissions
  15. MenuList []*model.SystemMenuPermissions
  16. MobileList []*model.SystemMobilePermissions
  17. }
  18. func (s *StoreEntry) AllPermissionsListToRolePermissions(req *SystemAllPermissionsList) *operationPb.RolePermissionsList {
  19. res := &operationPb.RolePermissionsList{
  20. Code: http.StatusOK,
  21. Msg: "ok",
  22. Data: &operationPb.RolePermissionsData{
  23. MobileList: make([]uint32, 0),
  24. MenuList: make([]uint32, 0),
  25. PastureList: make([]uint32, 0),
  26. },
  27. }
  28. wg := sync.WaitGroup{}
  29. wg.Add(3)
  30. go func() {
  31. for _, v := range req.MobileList {
  32. res.Data.MobileList = append(res.Data.MobileList, uint32(v.MobileId))
  33. }
  34. wg.Done()
  35. }()
  36. go func() {
  37. for _, v := range req.MenuList {
  38. res.Data.MenuList = append(res.Data.MenuList, uint32(v.MenuId))
  39. }
  40. wg.Done()
  41. }()
  42. go func() {
  43. for _, v := range req.PastureList {
  44. res.Data.PastureList = append(res.Data.PastureList, uint32(v.PastureId))
  45. }
  46. wg.Done()
  47. }()
  48. wg.Wait()
  49. return res
  50. }
  51. // SystemUserMenuPermissionsUnDuplicate 角色权限去重
  52. func (s *SystemAllPermissionsList) SystemUserMenuPermissionsUnDuplicate() {
  53. newMenuList := make([]*model.SystemMenuPermissions, 0)
  54. seen := make(map[int64]bool)
  55. for _, menu := range s.MenuList {
  56. if _, ok := seen[menu.MenuId]; !ok {
  57. newMenuList = append(newMenuList, menu)
  58. }
  59. }
  60. s.MenuList = newMenuList
  61. }
  62. func (s *StoreEntry) SystemPermissionsFormatPb(pastureList []*model.GroupPasture, mobileList []*model.SystemMobile, menuList []*model.SystemMenu) *operationPb.SystemUserMenuPermissions {
  63. systemUserMenuPermissions := &operationPb.SystemUserMenuPermissions{
  64. Code: http.StatusOK,
  65. Msg: "ok",
  66. Data: &operationPb.SystemUserMenuData{
  67. PastureList: make([]*operationPb.AddPastureRequest, 0),
  68. MenuList: make([]*operationPb.AddMenuRequest, 0),
  69. MobileList: make([]*operationPb.AddMobileRequest, 0),
  70. },
  71. }
  72. wg := sync.WaitGroup{}
  73. wg.Add(3)
  74. go func() {
  75. for _, v := range pastureList {
  76. systemUserMenuPermissions.Data.PastureList = append(systemUserMenuPermissions.Data.PastureList,
  77. &operationPb.AddPastureRequest{
  78. Id: int32(v.Id),
  79. Name: v.Name,
  80. },
  81. )
  82. }
  83. wg.Done()
  84. }()
  85. // TODO 后面优化成递归算法
  86. go func() {
  87. level := make(map[int32][]*operationPb.AddMenuRequest, 0)
  88. for _, menu := range menuList {
  89. if _, ok := level[menu.Level]; !ok {
  90. level[menu.Level] = make([]*operationPb.AddMenuRequest, 0)
  91. }
  92. level[menu.Level] = append(level[menu.Level], &operationPb.AddMenuRequest{
  93. Id: int32(menu.Id),
  94. Name: menu.Name,
  95. ParentId: int32(menu.ParentId),
  96. MenuType: menu.MenuType,
  97. Title: menu.Title,
  98. Path: menu.Path,
  99. IsShow: menu.IsShow,
  100. Component: menu.Component,
  101. Icon: menu.Icon,
  102. Sort: menu.Sort,
  103. Redirect: menu.Redirect,
  104. CreatedAt: int32(menu.CreatedAt),
  105. CreatedAtFormat: time.Unix(menu.CreatedAt, 0).Format(model.LayoutTime),
  106. Level: menu.Level,
  107. Affix: true,
  108. KeepAlive: true,
  109. Children: make([]*operationPb.AddMenuRequest, 0),
  110. })
  111. }
  112. for _, leve3Data := range level[model.Level3] {
  113. for _, leve2Data := range level[model.Level2] {
  114. if leve3Data.ParentId == leve2Data.Id {
  115. if leve2Data.Children == nil {
  116. leve2Data.Children = make([]*operationPb.AddMenuRequest, 0)
  117. }
  118. leve2Data.Children = append(leve2Data.Children, leve3Data)
  119. }
  120. }
  121. }
  122. for _, leve2Data := range level[model.Level2] {
  123. for _, leve1Data := range level[model.Level1] {
  124. if leve2Data.ParentId == leve1Data.Id {
  125. if leve1Data.Children == nil {
  126. leve1Data.Children = make([]*operationPb.AddMenuRequest, 0)
  127. }
  128. leve1Data.Children = append(leve1Data.Children, leve2Data)
  129. }
  130. }
  131. }
  132. systemUserMenuPermissions.Data.MenuList = level[model.Level1]
  133. wg.Done()
  134. }()
  135. go func() {
  136. for _, v := range mobileList {
  137. systemUserMenuPermissions.Data.MobileList = append(systemUserMenuPermissions.Data.MobileList,
  138. &operationPb.AddMobileRequest{
  139. Id: uint32(v.Id),
  140. Name: v.Name,
  141. },
  142. )
  143. }
  144. wg.Done()
  145. }()
  146. wg.Wait()
  147. return systemUserMenuPermissions
  148. }
  149. // GetSystemAllPermissionsList 获取用户相关权限
  150. func (s *StoreEntry) GetSystemAllPermissionsList(ctx context.Context, roleId int64) *SystemAllPermissionsList {
  151. systemAllPermissionsList := &SystemAllPermissionsList{
  152. PastureList: make([]*model.SystemGroupPasturePermissions, 0),
  153. MenuList: make([]*model.SystemMenuPermissions, 0),
  154. MobileList: make([]*model.SystemMobilePermissions, 0),
  155. }
  156. wg := sync.WaitGroup{}
  157. wg.Add(3)
  158. go func() {
  159. pastureList := make([]*model.SystemGroupPasturePermissions, 0)
  160. if err := s.DB.Where("role_id = ? and is_show = ?", roleId, operationPb.IsShow_OK).Find(&pastureList).Error; err != nil {
  161. zaplog.Error("SystemPasturePermissions", zap.Any("Err", err))
  162. }
  163. systemAllPermissionsList.PastureList = pastureList
  164. wg.Done()
  165. }()
  166. go func() {
  167. menuList := make([]*model.SystemMenuPermissions, 0)
  168. if err := s.DB.Where("role_id = ? and is_show = ?", roleId, operationPb.IsShow_OK).Find(&menuList).Error; err != nil {
  169. zaplog.Error("SystemMenuPermissions", zap.Any("Err", err))
  170. }
  171. systemAllPermissionsList.MenuList = menuList
  172. wg.Done()
  173. }()
  174. // 获取供应商数据
  175. go func() {
  176. mobileList := make([]*model.SystemMobilePermissions, 0)
  177. if err := s.DB.Where("role_id = ? and is_show = ?", roleId, operationPb.IsShow_OK).Find(&mobileList).Error; err != nil {
  178. zaplog.Error("SystemMobilePermissions", zap.Any("Err", err))
  179. }
  180. systemAllPermissionsList.MobileList = mobileList
  181. wg.Done()
  182. }()
  183. wg.Wait()
  184. return systemAllPermissionsList
  185. }
  186. // GetPastureList 获取******
  187. func (s *StoreEntry) GetPastureList(ctx context.Context, req []*model.SystemGroupPasturePermissions) ([]*model.GroupPasture, error) {
  188. ids := make([]int64, 0)
  189. for _, v := range req {
  190. ids = append(ids, v.PastureId)
  191. }
  192. groupPastureList := make([]*model.GroupPasture, 0)
  193. if len(ids) > 0 {
  194. if err := s.DB.Where("is_show = ?", operationPb.IsShow_OK).Find(&groupPastureList, ids).Error; err != nil {
  195. return nil, xerr.WithStack(err)
  196. }
  197. }
  198. return groupPastureList, nil
  199. }
  200. // GetMenuList 获取******
  201. func (s *StoreEntry) GetMenuList(ctx context.Context, req []*model.SystemMenuPermissions) ([]*model.SystemMenu, error) {
  202. ids := make([]int64, 0)
  203. for _, v := range req {
  204. ids = append(ids, v.MenuId)
  205. }
  206. menuList := make([]*model.SystemMenu, 0)
  207. if len(ids) > 0 {
  208. if err := s.DB.Where("is_show = ?", operationPb.IsShow_OK).Find(&menuList, ids).Error; err != nil {
  209. return nil, xerr.WithStack(err)
  210. }
  211. }
  212. return menuList, nil
  213. }
  214. // GetMobileList 获取******
  215. func (s *StoreEntry) GetMobileList(ctx context.Context, req []*model.SystemMobilePermissions) ([]*model.SystemMobile, error) {
  216. ids := make([]int64, 0)
  217. for _, v := range req {
  218. ids = append(ids, v.MobileId)
  219. }
  220. mobileList := make([]*model.SystemMobile, 0)
  221. if len(ids) > 0 {
  222. if err := s.DB.Where("is_show = ?", operationPb.IsShow_OK).Find(&mobileList, ids).Error; err != nil {
  223. return nil, xerr.WithStack(err)
  224. }
  225. }
  226. return mobileList, nil
  227. }