system_permissions.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  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. CratedAtFormat: time.Unix(menu.CreatedAt, 0).Format(model.LayoutTime),
  73. Level: menu.Level,
  74. Children: make([]*operationPb.AddMenuRequest, 0),
  75. })
  76. }
  77. for _, leve3Data := range level[Level3] {
  78. for _, leve2Data := range level[Level2] {
  79. if leve3Data.ParentId == leve2Data.Id {
  80. if leve2Data.Children == nil {
  81. leve2Data.Children = make([]*operationPb.AddMenuRequest, 0)
  82. }
  83. leve2Data.Children = append(leve2Data.Children, leve3Data)
  84. }
  85. }
  86. }
  87. for _, leve2Data := range level[Level2] {
  88. for _, leve1Data := range level[Level1] {
  89. if leve2Data.ParentId == leve1Data.Id {
  90. if leve1Data.Children == nil {
  91. leve1Data.Children = make([]*operationPb.AddMenuRequest, 0)
  92. }
  93. leve1Data.Children = append(leve1Data.Children, leve2Data)
  94. }
  95. }
  96. }
  97. systemUserMenuPermissions.MenuList = level[Level1]
  98. wg.Done()
  99. }()
  100. go func() {
  101. for _, v := range mobileList {
  102. systemUserMenuPermissions.MobileList = append(systemUserMenuPermissions.MobileList,
  103. &operationPb.AddMobileRequest{
  104. Id: v.Id,
  105. Name: v.Name,
  106. },
  107. )
  108. }
  109. wg.Done()
  110. }()
  111. wg.Wait()
  112. return systemUserMenuPermissions
  113. }
  114. // GetSystemAllPermissionsList 获取用户相关权限
  115. func (s *StoreEntry) GetSystemAllPermissionsList(ctx context.Context, roleId int64) *SystemAllPermissionsList {
  116. systemAllPermissionsList := &SystemAllPermissionsList{
  117. PastureList: make([]*model.SystemGroupPasturePermissions, 0),
  118. MenuList: make([]*model.SystemMenuPermissions, 0),
  119. MobileList: make([]*model.SystemMobilePermissions, 0),
  120. }
  121. wg := sync.WaitGroup{}
  122. wg.Add(3)
  123. go func() {
  124. pastureList := make([]*model.SystemGroupPasturePermissions, 0)
  125. if err := s.DB.Where("role_id = ? and is_show = ?", roleId, operationPb.IsShow_OK).Find(&pastureList).Error; err != nil {
  126. zaplog.Error("SystemPasturePermissions", zap.Any("Err", err))
  127. }
  128. systemAllPermissionsList.PastureList = pastureList
  129. wg.Done()
  130. }()
  131. go func() {
  132. menuList := make([]*model.SystemMenuPermissions, 0)
  133. if err := s.DB.Where("role_id = ? and is_show = ?", roleId, operationPb.IsShow_OK).Find(&menuList).Error; err != nil {
  134. zaplog.Error("SystemMenuPermissions", zap.Any("Err", err))
  135. }
  136. systemAllPermissionsList.MenuList = menuList
  137. wg.Done()
  138. }()
  139. // 获取供应商数据
  140. go func() {
  141. mobileList := make([]*model.SystemMobilePermissions, 0)
  142. if err := s.DB.Where("role_id = ? and is_show = ?", roleId, operationPb.IsShow_OK).Find(&mobileList).Error; err != nil {
  143. zaplog.Error("SystemMobilePermissions", zap.Any("Err", err))
  144. }
  145. systemAllPermissionsList.MobileList = mobileList
  146. wg.Done()
  147. }()
  148. wg.Wait()
  149. return systemAllPermissionsList
  150. }
  151. // GetPastureList 获取******
  152. func (s *StoreEntry) GetPastureList(ctx context.Context, req []*model.SystemGroupPasturePermissions) ([]*model.GroupPasture, error) {
  153. ids := make([]int64, 0)
  154. for _, v := range req {
  155. ids = append(ids, v.PastureId)
  156. }
  157. groupPastureList := make([]*model.GroupPasture, 0)
  158. if len(ids) > 0 {
  159. if err := s.DB.Where("is_show = ?", operationPb.IsShow_OK).Find(&groupPastureList, ids).Error; err != nil {
  160. return nil, xerr.WithStack(err)
  161. }
  162. }
  163. return groupPastureList, nil
  164. }
  165. // GetMenuList 获取******
  166. func (s *StoreEntry) GetMenuList(ctx context.Context, req []*model.SystemMenuPermissions) ([]*model.SystemMenu, error) {
  167. ids := make([]int64, 0)
  168. for _, v := range req {
  169. ids = append(ids, v.MenuId)
  170. }
  171. menuList := make([]*model.SystemMenu, 0)
  172. if len(ids) > 0 {
  173. if err := s.DB.Where("is_show = ?", operationPb.IsShow_OK).Find(&menuList, ids).Error; err != nil {
  174. return nil, xerr.WithStack(err)
  175. }
  176. }
  177. return menuList, nil
  178. }
  179. // GetMobileList 获取******
  180. func (s *StoreEntry) GetMobileList(ctx context.Context, req []*model.SystemMobilePermissions) ([]*model.SystemMobile, error) {
  181. ids := make([]int64, 0)
  182. for _, v := range req {
  183. ids = append(ids, v.MobileId)
  184. }
  185. mobileList := make([]*model.SystemMobile, 0)
  186. if len(ids) > 0 {
  187. if err := s.DB.Where("is_show = ?", operationPb.IsShow_OK).Find(&mobileList, ids).Error; err != nil {
  188. return nil, xerr.WithStack(err)
  189. }
  190. }
  191. return mobileList, nil
  192. }