system_permissions.go 6.3 KB

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