system_permissions.go 6.3 KB

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