system_permissions.go 7.1 KB

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