Skip to content

Commit

Permalink
Merge pull request #101 from jsonwan/github_fix/global_settings
Browse files Browse the repository at this point in the history
fix: 全局设置页面无权限报错 #97
  • Loading branch information
wangyu096 committed Jul 15, 2021
2 parents cf0b350 + f2815bc commit 5bac697
Show file tree
Hide file tree
Showing 17 changed files with 89 additions and 27 deletions.
Expand Up @@ -30,6 +30,7 @@
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
* @Description
Expand All @@ -38,6 +39,20 @@
*/
public class CustomCollectionUtils {

public static <T> List<T> mergeList(List<T> list1, List<T> list2) {
if (list1 == null || list1.isEmpty()) return list2;
if (list2 == null || list2.isEmpty()) return list1;
Set<T> set = new HashSet<>(list1);
List<T> resultList = new ArrayList<>(list1);
list2.forEach(it -> {
if (!set.contains(it)) {
resultList.add(it);
set.add(it);
}
});
return resultList;
}

public static List<String> getNoDuplicateList(String rawStr, String separator) {
if (rawStr == null || rawStr.isEmpty()) {
return new ArrayList<>();
Expand Down
@@ -0,0 +1,23 @@
package com.tencent.bk.job.common.util;

import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

public class CustomCollectionUtilsTest {

@Test
void testMergeList() {
List<Long> list1 = Arrays.asList(1L, 2L);
List<Long> list2 = Arrays.asList(1L, 3L, 4L);
assertThat(CustomCollectionUtils.mergeList(null, null)).isNull();
assertThat(CustomCollectionUtils.mergeList(list1, null)).hasSize(2);
assertThat(CustomCollectionUtils.mergeList(null, list2)).hasSize(3);
List<Long> mergedList = CustomCollectionUtils.mergeList(list1, list2);
assertThat(mergedList).hasSize(4);
mergedList.forEach(System.out::println);
}
}
Expand Up @@ -25,7 +25,7 @@
package com.tencent.bk.job.analysis.api.op.impl;

import com.tencent.bk.job.analysis.api.op.OpResource;
import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.op.*;
import com.tencent.bk.job.analysis.task.statistics.StatisticsTaskScheduler;
Expand Down
Expand Up @@ -25,7 +25,7 @@
package com.tencent.bk.job.analysis.api.web.impl;

import com.tencent.bk.job.analysis.api.web.WebStatisticsResource;
import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.consts.DimensionEnum;
import com.tencent.bk.job.analysis.consts.DistributionMetricEnum;
import com.tencent.bk.job.analysis.consts.ResourceEnum;
Expand Down
Expand Up @@ -22,7 +22,7 @@
* IN THE SOFTWARE.
*/

package com.tencent.bk.job.analysis.config.listener;
package com.tencent.bk.job.analysis.config;

import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
Expand Down Expand Up @@ -50,7 +50,7 @@ public class StatisticConfig {
@Value("${job.analysis.statistics.yoy.days:7}")
private Integer yoyDays;

@Value("${job.analysis.statistics.tag.num.max:100}")
@Value("${job.analysis.statistics.tag.num.max:120}")
private Integer maxTagNum;

/**
Expand Down
Expand Up @@ -25,7 +25,7 @@
package com.tencent.bk.job.analysis.service;

import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.dto.SimpleAppInfoDTO;
import com.tencent.bk.job.analysis.model.web.CommonStatisticWithRateVO;
Expand Down
Expand Up @@ -24,23 +24,32 @@

package com.tencent.bk.job.analysis.service;

import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.consts.DistributionMetricEnum;
import com.tencent.bk.job.analysis.consts.TotalMetricEnum;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.dto.SimpleAppInfoDTO;
import com.tencent.bk.job.analysis.model.web.CommonDistributionVO;
import com.tencent.bk.job.analysis.model.web.CommonStatisticWithRateVO;
import com.tencent.bk.job.analysis.model.web.CommonTrendElementVO;
import com.tencent.bk.job.analysis.model.web.PerAppStatisticVO;
import com.tencent.bk.job.analysis.util.calc.SimpleMomYoyCalculator;
import com.tencent.bk.job.common.statistics.consts.StatisticsConstants;
import com.tencent.bk.job.common.statistics.model.dto.StatisticsDTO;
import com.tencent.bk.job.common.util.CustomCollectionUtils;
import com.tencent.bk.job.common.util.date.DateUtils;
import com.tencent.bk.job.common.util.json.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Slf4j
@Service
Expand All @@ -60,6 +69,15 @@ public CommonStatisticService(StatisticsDAO statisticsDAO, StatisticConfig stati
this.appService = appService;
}

public List<Long> getJoinedAppIdList(String date) {
StatisticsDTO statisticsDTO = statisticsDAO.getStatistics(StatisticsConstants.DEFAULT_APP_ID,
StatisticsConstants.RESOURCE_APP, StatisticsConstants.DIMENSION_APP_STATISTIC_TYPE,
StatisticsConstants.DIMENSION_VALUE_APP_STATISTIC_TYPE_APP_LIST, date);
List<SimpleAppInfoDTO> applicationDTOList = JsonUtils.fromJson(statisticsDTO.getValue(),
new TypeReference<List<SimpleAppInfoDTO>>() {
});
return applicationDTOList.parallelStream().map(SimpleAppInfoDTO::getId).collect(Collectors.toList());
}

/**
* @param statisticsDTO
Expand Down Expand Up @@ -166,7 +184,12 @@ public int compare(CommonTrendElementVO o1, CommonTrendElementVO o2) {

public List<PerAppStatisticVO> listByPerApp(String resource, TotalMetricEnum metric, List<Long> appIdList,
String date) {
List<StatisticsDTO> statisticsDTOList = statisticsDAO.getStatisticsList(appIdList, null, resource,
// 增加筛选范围:已接入的业务
List<Long> scopedAppIdList = CustomCollectionUtils.mergeList(appIdList, getJoinedAppIdList(date));
List<StatisticsDTO> statisticsDTOList = statisticsDAO.getStatisticsList(
scopedAppIdList,
null,
resource,
StatisticsConstants.DIMENSION_GLOBAL_STATISTIC_TYPE,
StatisticsConstants.DIMENSION_VALUE_GLOBAL_STATISTIC_TYPE_PREFIX + metric.name(), date);
List<PerAppStatisticVO> perAppStatisticVOList = new ArrayList<>();
Expand Down
Expand Up @@ -24,7 +24,7 @@

package com.tencent.bk.job.analysis.service;

import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.web.DayDistributionElementVO;
import com.tencent.bk.job.common.statistics.consts.StatisticsConstants;
Expand Down
Expand Up @@ -24,7 +24,7 @@

package com.tencent.bk.job.analysis.service;

import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.web.DayDistributionElementVO;
import com.tencent.bk.job.common.statistics.consts.StatisticsConstants;
Expand Down
Expand Up @@ -24,7 +24,7 @@

package com.tencent.bk.job.analysis.service;

import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.web.CommonDistributionVO;
import com.tencent.bk.job.common.statistics.consts.StatisticsConstants;
Expand Down
Expand Up @@ -24,7 +24,7 @@

package com.tencent.bk.job.analysis.service;

import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.web.ScriptCiteStatisticVO;
import com.tencent.bk.job.common.statistics.consts.StatisticsConstants;
Expand Down
Expand Up @@ -25,7 +25,7 @@
package com.tencent.bk.job.analysis.service;

import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.web.CommonDistributionVO;
import com.tencent.bk.job.common.statistics.consts.StatisticsConstants;
Expand Down
Expand Up @@ -24,7 +24,7 @@

package com.tencent.bk.job.analysis.task.statistics;

import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.task.statistics.task.*;
import com.tencent.bk.job.common.redis.util.LockUtils;
import com.tencent.bk.job.common.redis.util.RedisKeyHeartBeatThread;
Expand Down
Expand Up @@ -24,7 +24,7 @@

package com.tencent.bk.job.analysis.task.statistics.task;

import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.common.statistics.consts.StatisticsConstants;
import com.tencent.bk.job.common.util.TimeUtil;
Expand Down
Expand Up @@ -24,7 +24,7 @@

package com.tencent.bk.job.analysis.task.statistics.task;

import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.common.statistics.consts.StatisticsConstants;
import com.tencent.bk.job.common.util.TimeUtil;
Expand Down
Expand Up @@ -26,7 +26,7 @@

import com.fasterxml.jackson.core.type.TypeReference;
import com.tencent.bk.job.analysis.client.ExecuteMetricsClient;
import com.tencent.bk.job.analysis.config.listener.StatisticConfig;
import com.tencent.bk.job.analysis.config.StatisticConfig;
import com.tencent.bk.job.analysis.dao.StatisticsDAO;
import com.tencent.bk.job.analysis.model.dto.SimpleAppInfoDTO;
import com.tencent.bk.job.analysis.service.BasicServiceManager;
Expand Down
Expand Up @@ -27,8 +27,8 @@
import com.tencent.bk.job.common.RequestIdLogger;
import com.tencent.bk.job.common.iam.constant.ActionId;
import com.tencent.bk.job.common.iam.exception.InSufficientPermissionException;
import com.tencent.bk.job.common.iam.service.WebAuthService;
import com.tencent.bk.job.common.model.permission.AuthResultVO;
import com.tencent.bk.job.common.iam.model.AuthResult;
import com.tencent.bk.job.common.iam.service.AuthService;
import com.tencent.bk.job.common.util.JobContextUtil;
import com.tencent.bk.job.common.util.SimpleRequestIdLogger;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -58,10 +58,11 @@ public class UriPermissionInterceptor extends HandlerInterceptorAdapter {
private final String URI_PATTERN_PUBLIC_SCRIPT = "/web/public_script/**";
private final String URI_PATTERN_PUBLIC_TAG = "/web/public_tag/**";
private final String URI_PATTERN_SERVICE_INFO = "/web/serviceInfo/**";
private WebAuthService authService;
private AuthService authService;
private PathMatcher pathMatcher;

@Autowired
public UriPermissionInterceptor(WebAuthService authService) {
public UriPermissionInterceptor(AuthService authService) {
this.authService = authService;
this.pathMatcher = new AntPathMatcher();
}
Expand Down Expand Up @@ -101,19 +102,19 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons
"controlUriPatterns=" + getControlUriPatternsList());
//仅超级管理员可使用管理相关接口
if (pathMatcher.match(URI_PATTERN_NOTIFY_BLACKLIST, uri)) {
AuthResultVO authResult = authService.auth(true, username, ActionId.GLOBAL_SETTINGS);
AuthResult authResult = authService.auth(true, username, ActionId.GLOBAL_SETTINGS);
if (!authResult.isPass()) {
throw new InSufficientPermissionException(new Object[]{authResult});
throw new InSufficientPermissionException(authResult);
}
} else if (pathMatcher.match(URI_PATTERN_GLOBAL_SETTINGS, uri)) {
AuthResultVO authResult = authService.auth(true, username, ActionId.GLOBAL_SETTINGS);
AuthResult authResult = authService.auth(true, username, ActionId.GLOBAL_SETTINGS);
if (!authResult.isPass()) {
throw new InSufficientPermissionException(new Object[]{authResult});
throw new InSufficientPermissionException(authResult);
}
} else if (pathMatcher.match(URI_PATTERN_SERVICE_INFO, uri)) {
AuthResultVO authResult = authService.auth(true, username, ActionId.SERVICE_STATE_ACCESS);
AuthResult authResult = authService.auth(true, username, ActionId.SERVICE_STATE_ACCESS);
if (!authResult.isPass()) {
throw new InSufficientPermissionException(new Object[]{authResult});
throw new InSufficientPermissionException(authResult);
}
}
return true;
Expand Down

0 comments on commit 5bac697

Please sign in to comment.