|
@@ -350,27 +350,20 @@ func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUs
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, xerr.WithStack(err)
|
|
return nil, xerr.WithStack(err)
|
|
}
|
|
}
|
|
- // 根据用户token获取用户数据
|
|
|
|
- systemUser, err := s.GetCurrentSystemUser(ctx)
|
|
|
|
- if err != nil {
|
|
|
|
- return nil, xerr.Custom("该用户数据不存在")
|
|
|
|
- }
|
|
|
|
|
|
|
|
- systemUserDepthRole, err := s.GetSystemUserDepthRole(ctx, userModel.AppPasture.Id, systemUser.Id)
|
|
|
|
|
|
+ systemUserDepthRole, err := s.GetSystemUserDepthRole(ctx, userModel.AppPasture.Id, userModel.SystemUser.Id)
|
|
if err != nil {
|
|
if err != nil {
|
|
return nil, xerr.WithStack(err)
|
|
return nil, xerr.WithStack(err)
|
|
}
|
|
}
|
|
|
|
|
|
// 获取用户角色数据
|
|
// 获取用户角色数据
|
|
systemRoleList := make([]*model.SystemRole, 0)
|
|
systemRoleList := make([]*model.SystemRole, 0)
|
|
- if err = s.DB.Where("id IN ?", systemUserDepthRole.GetRoleIds()).
|
|
|
|
|
|
+ if err = s.DB.Model(new(model.SystemRole)).
|
|
|
|
+ Where("id IN ?", systemUserDepthRole.GetRoleIds()).
|
|
Where("pasture_id = ?", userModel.AppPasture.Id).
|
|
Where("pasture_id = ?", userModel.AppPasture.Id).
|
|
Where("is_delete = ?", pasturePb.IsShow_Ok).
|
|
Where("is_delete = ?", pasturePb.IsShow_Ok).
|
|
Where("is_show = ?", pasturePb.IsShow_Ok).
|
|
Where("is_show = ?", pasturePb.IsShow_Ok).
|
|
Find(&systemRoleList).Error; err != nil {
|
|
Find(&systemRoleList).Error; err != nil {
|
|
- if errors.Is(err, gorm.ErrRecordNotFound) {
|
|
|
|
- return nil, xerr.Custom("该用户角色不存在")
|
|
|
|
- }
|
|
|
|
return nil, xerr.WithStack(err)
|
|
return nil, xerr.WithStack(err)
|
|
}
|
|
}
|
|
|
|
|
|
@@ -378,14 +371,9 @@ func (s *StoreEntry) GetSystemUserMenu(ctx context.Context) (*pasturePb.SystemUs
|
|
return nil, xerr.Custom("该用户角色不存在")
|
|
return nil, xerr.Custom("该用户角色不存在")
|
|
}
|
|
}
|
|
|
|
|
|
- roleIds := make([]int64, 0)
|
|
|
|
- for _, role := range systemRoleList {
|
|
|
|
- roleIds = append(roleIds, role.Id)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
systemRoleMenuList := make([]*model.SystemRoleMenu, 0)
|
|
systemRoleMenuList := make([]*model.SystemRoleMenu, 0)
|
|
if err = s.DB.Model(new(model.SystemRoleMenu)).
|
|
if err = s.DB.Model(new(model.SystemRoleMenu)).
|
|
- Where("role_id IN ?", roleIds).
|
|
|
|
|
|
+ Where("role_id IN ?", systemUserDepthRole.GetRoleIds()).
|
|
Find(&systemRoleMenuList).Error; err != nil {
|
|
Find(&systemRoleMenuList).Error; err != nil {
|
|
return nil, xerr.WithStack(err)
|
|
return nil, xerr.WithStack(err)
|
|
}
|
|
}
|
|
@@ -557,64 +545,16 @@ func (s *StoreEntry) GetMenusWithParents(ctx context.Context, pastureId int64, m
|
|
return nil, xerr.Customf("菜单id不能为空")
|
|
return nil, xerr.Customf("菜单id不能为空")
|
|
}
|
|
}
|
|
|
|
|
|
- systemPastureMenuList := make([]*model.SystemPastureMenu, 0)
|
|
|
|
- if err := s.DB.Model(new(model.SystemPastureMenu)).
|
|
|
|
- Where("pasture_id = ?", pastureId).
|
|
|
|
- Find(&systemPastureMenuList).Error; err != nil {
|
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- pastureMenuIds := make([]int64, 0)
|
|
|
|
- for _, v := range systemPastureMenuList {
|
|
|
|
- pastureMenuIds = append(pastureMenuIds, v.MenuId)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- systemMenuList := make([]*model.SystemMenu, 0)
|
|
|
|
- if err := s.DB.Model(new(model.SystemMenu)).
|
|
|
|
- Where("id IN ?", pastureMenuIds).
|
|
|
|
- Find(&systemMenuList).Error; err != nil {
|
|
|
|
- return nil, xerr.WithStack(err)
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- systemMenuMap := make(map[int64]*model.SystemMenu)
|
|
|
|
- for _, v := range systemMenuList {
|
|
|
|
- systemMenuMap[v.Id] = v
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ menuIds = util.DeduplicateInt64(menuIds)
|
|
userMenuList := make([]*model.SystemMenu, 0)
|
|
userMenuList := make([]*model.SystemMenu, 0)
|
|
- if err := s.DB.Model(new(model.SystemMenu)).
|
|
|
|
- Where("id IN ?", menuIds).
|
|
|
|
|
|
+ if err := s.DB.Table(fmt.Sprintf("%s as a", new(model.SystemMenu).TableName())).
|
|
|
|
+ Select("a.*").
|
|
|
|
+ Joins("LEFT JOIN system_role_menu as b ON a.id = b.menu_id").
|
|
|
|
+ Where("b.id IN ?", menuIds).
|
|
Find(&userMenuList).Error; err != nil {
|
|
Find(&userMenuList).Error; err != nil {
|
|
return nil, xerr.WithStack(err)
|
|
return nil, xerr.WithStack(err)
|
|
}
|
|
}
|
|
|
|
|
|
- // 收集所有需要的菜单ID(包括各级父菜单ID)
|
|
|
|
- processed := make(map[int64]struct{}) // 防止重复处理
|
|
|
|
- for _, menu := range userMenuList {
|
|
|
|
- currentID := menu.Id
|
|
|
|
-
|
|
|
|
- // 向上追溯所有父级菜单
|
|
|
|
- for currentID != 0 {
|
|
|
|
- // 如果已经处理过,跳过
|
|
|
|
- if _, exists := processed[currentID]; exists {
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 添加到结果集
|
|
|
|
- menuIds = append(menuIds, currentID)
|
|
|
|
- processed[currentID] = struct{}{}
|
|
|
|
-
|
|
|
|
- // 获取父菜单
|
|
|
|
- parentMenu, ok := systemMenuMap[currentID]
|
|
|
|
- if !ok || parentMenu.ParentId == 0 {
|
|
|
|
- break
|
|
|
|
- }
|
|
|
|
- currentID = parentMenu.ParentId
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- // 去重
|
|
|
|
- menuIds = util.DeduplicateInt64(menuIds)
|
|
|
|
allSystemMenuList := make([]*model.SystemMenu, 0)
|
|
allSystemMenuList := make([]*model.SystemMenu, 0)
|
|
if err := s.DB.Model(new(model.SystemMenu)).
|
|
if err := s.DB.Model(new(model.SystemMenu)).
|
|
Where("id IN (?) AND is_delete = ?", menuIds, pasturePb.IsShow_Ok).
|
|
Where("id IN (?) AND is_delete = ?", menuIds, pasturePb.IsShow_Ok).
|