diff --git a/backend/pom.xml b/backend/pom.xml
index 8ed59a2fa0..2ec6c7ff5e 100644
--- a/backend/pom.xml
+++ b/backend/pom.xml
@@ -207,7 +207,7 @@
io.dataease
dataease-plugin-interface
- 1.6
+ 1.7
cn.hutool
diff --git a/backend/src/main/java/io/dataease/commons/constants/ColumnPermissionConstants.java b/backend/src/main/java/io/dataease/commons/constants/ColumnPermissionConstants.java
new file mode 100644
index 0000000000..52f1a00796
--- /dev/null
+++ b/backend/src/main/java/io/dataease/commons/constants/ColumnPermissionConstants.java
@@ -0,0 +1,10 @@
+package io.dataease.commons.constants;
+
+public class ColumnPermissionConstants {
+
+ public final static String Prohibit = "Prohibit";
+ public final static String Desensitization = "Desensitization";
+ public final static String Desensitization_desc = "******";
+
+
+}
diff --git a/backend/src/main/java/io/dataease/commons/license/DefaultLicenseService.java b/backend/src/main/java/io/dataease/commons/license/DefaultLicenseService.java
index 4ec131a818..d4b8224600 100644
--- a/backend/src/main/java/io/dataease/commons/license/DefaultLicenseService.java
+++ b/backend/src/main/java/io/dataease/commons/license/DefaultLicenseService.java
@@ -19,7 +19,7 @@ public class DefaultLicenseService {
private InnerLicenseService innerLicenseService;
private static final String LICENSE_ID = "fit2cloud_license";
- private static final String validatorUtil = "/usr/bin/validator";
+ private static final String validatorUtil = "/usr/local/bin/validator";
private static final String product = "DataEase";
public F2CLicenseResponse validateLicense(String product, String licenseKey) {
diff --git a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java
index 291a17c709..f0a7679475 100644
--- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java
+++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java
@@ -6,6 +6,7 @@ import io.dataease.base.domain.*;
import io.dataease.base.mapper.ChartViewMapper;
import io.dataease.base.mapper.ext.ExtChartGroupMapper;
import io.dataease.base.mapper.ext.ExtChartViewMapper;
+import io.dataease.commons.constants.ColumnPermissionConstants;
import io.dataease.commons.constants.CommonConstants;
import io.dataease.commons.constants.JdbcConstants;
import io.dataease.commons.utils.AuthUtils;
@@ -27,6 +28,7 @@ import io.dataease.provider.query.QueryProvider;
import io.dataease.service.dataset.DataSetTableFieldsService;
import io.dataease.service.dataset.DataSetTableService;
import io.dataease.service.dataset.DataSetTableUnionService;
+import io.dataease.service.dataset.PermissionService;
import io.dataease.service.datasource.DatasourceService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
@@ -41,6 +43,8 @@ import java.util.*;
import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors;
+import static io.dataease.commons.constants.ColumnPermissionConstants.Desensitization_desc;
+
/**
* @Author gin
* @Date 2021/3/1 12:34 下午
@@ -61,6 +65,8 @@ public class ChartViewService {
private ExtChartGroupMapper extChartGroupMapper;
@Resource
private DataSetTableUnionService dataSetTableUnionService;
+ @Resource
+ private PermissionService permissionService;
//默认使用非公平
private ReentrantLock lock = new ReentrantLock();
@@ -187,6 +193,25 @@ public class ChartViewService {
return calcData(view, request, request.isCache());
}
+ private void checkPermissions(List extends ChartViewFieldBaseDTO> chartViewFieldDTOS, List fields, List desensitizationList, Boolean alowDesensitization) throws Exception{
+ String filedName = "";
+ for (ChartViewFieldBaseDTO chartViewFieldDTO : chartViewFieldDTOS) {
+ if(alowDesensitization){
+ if (!fields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()).contains(chartViewFieldDTO.getDataeaseName())) {
+ filedName = filedName + chartViewFieldDTO.getName() + " ,";
+ }
+ }else {
+ if (desensitizationList.contains(chartViewFieldDTO.getDataeaseName()) || !fields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()).contains(chartViewFieldDTO.getDataeaseName())) {
+ filedName = filedName + chartViewFieldDTO.getName() + " ,";
+ }
+ }
+ }
+ filedName = filedName.endsWith(",") ? filedName.substring(0, filedName.length() - 1) : filedName;
+ if(StringUtils.isNotEmpty(filedName)){
+ throw new Exception("以下字段没有权限: " + filedName);
+ }
+ }
+
public ChartViewDTO calcData(ChartViewDTO view, ChartExtRequest requestList, boolean cache) throws Exception {
if (ObjectUtils.isEmpty(view)) {
throw new RuntimeException(Translator.get("i18n_chart_delete"));
@@ -208,39 +233,52 @@ public class ChartViewService {
}.getType());
List drill = new Gson().fromJson(view.getDrillFields(), new TypeToken>() {
}.getType());
- // 获取对应数据集行权限
+
+
DatasetTableField datasetTableFieldObj = DatasetTableField.builder().tableId(view.getTableId()).checked(Boolean.TRUE).build();
List fields = dataSetTableFieldsService.list(datasetTableFieldObj);
DatasetTable datasetTable = dataSetTableService.get(view.getTableId());
- List permissionFields = dataSetTableService.getCustomFilters(fields, datasetTable, requestList.getUser());
+
+ //列权限
+ List desensitizationList = new ArrayList<>();
+ fields = permissionService.filterColumnPermissons(fields, desensitizationList, datasetTable, null);
+ checkPermissions(fieldCustomFilter, fields, desensitizationList, false);
+ //行权限
+ List permissionFields = permissionService.getCustomFilters(fields, datasetTable, requestList.getUser());
fieldCustomFilter.addAll(permissionFields);
for (ChartFieldCustomFilterDTO ele : fieldCustomFilter) {
ele.setField(dataSetTableFieldsService.get(ele.getId()));
}
- if (StringUtils.equalsIgnoreCase("text", view.getType())
- || StringUtils.equalsIgnoreCase("gauge", view.getType())
- || StringUtils.equalsIgnoreCase("liquid", view.getType())) {
- xAxis = new ArrayList<>();
- if (CollectionUtils.isEmpty(yAxis)) {
- ChartViewDTO dto = new ChartViewDTO();
- BeanUtils.copyBean(dto, view);
- return dto;
- }
- } else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
- yAxis = new ArrayList<>();
- if (CollectionUtils.isEmpty(xAxis)) {
- ChartViewDTO dto = new ChartViewDTO();
- BeanUtils.copyBean(dto, view);
- return dto;
- }
- } else {
- if (CollectionUtils.isEmpty(xAxis) && CollectionUtils.isEmpty(yAxis)) {
- ChartViewDTO dto = new ChartViewDTO();
- BeanUtils.copyBean(dto, view);
- return dto;
- }
+ if (CollectionUtils.isEmpty(xAxis) && CollectionUtils.isEmpty(yAxis)) {
+ return emptyChartViewDTO(view);
+ }
+
+ switch (view.getType()){
+ case "text":
+ case "gauge":
+ case "liquid":
+ xAxis = new ArrayList<>();
+ checkPermissions(yAxis, fields, desensitizationList, false);
+ if (CollectionUtils.isEmpty(yAxis)) {
+ return emptyChartViewDTO(view);
+ }
+ break;
+ case "table-info":
+ yAxis = new ArrayList<>();
+ checkPermissions(xAxis, fields, desensitizationList, true);
+ if (CollectionUtils.isEmpty(xAxis)) {
+ return emptyChartViewDTO(view);
+ }
+ break;
+ case "table-normal":
+ checkPermissions(xAxis, fields, desensitizationList, true);
+ checkPermissions(yAxis, fields, desensitizationList, true);
+ break;
+ default:
+ checkPermissions(xAxis, fields, desensitizationList, false);
+ checkPermissions(yAxis, fields, desensitizationList, false);
}
// 过滤来自仪表板的条件
@@ -344,7 +382,7 @@ public class ChartViewService {
if (ObjectUtils.isEmpty(ds)) {
throw new RuntimeException(Translator.get("i18n_datasource_delete"));
}
- if(StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")){
+ if (StringUtils.isNotEmpty(ds.getStatus()) && ds.getStatus().equalsIgnoreCase("Error")) {
throw new Exception(Translator.get("i18n_invalid_ds"));
}
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
@@ -569,7 +607,7 @@ public class ChartViewService {
}
// table组件,明细表,也用于导出数据
- Map mapTableNormal = transTableNormal(xAxis, yAxis, view, data, extStack);
+ Map mapTableNormal = transTableNormal(xAxis, yAxis, view, data, extStack, desensitizationList);
map.putAll(mapChart);
map.putAll(mapTableNormal);
@@ -587,6 +625,12 @@ public class ChartViewService {
return dto;
}
+ private ChartViewDTO emptyChartViewDTO(ChartViewDTO view) {
+ ChartViewDTO dto = new ChartViewDTO();
+ BeanUtils.copyBean(dto, view);
+ return dto;
+ }
+
private boolean checkCalcType(String dateStyle, String calcType) {
switch (dateStyle) {
case "y":
@@ -1510,7 +1554,7 @@ public class ChartViewService {
}
// 表格
- private Map transTableNormal(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack) {
+ private Map transTableNormal(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, List desensitizationList) {
Map map = new TreeMap<>();
List fields = new ArrayList<>();
List