system_permissions.go 7.0 KB

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