From 59a8dc454484951c71a716aa08b684c7e48311b7 Mon Sep 17 00:00:00 2001 From: taojinlong Date: Thu, 24 Nov 2022 19:06:38 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=95=B0=E6=8D=AE=E9=9B=86=E8=84=B1?= =?UTF-8?q?=E6=95=8F=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../constants/ColumnPermissionConstants.java | 3 - .../dataset/DataSetTableFieldController.java | 7 +- .../service/chart/ChartViewService.java | 51 +++++------ .../service/chart/util/ChartDataBuild.java | 80 ++++++++++++++--- .../service/dataset/DataSetTableService.java | 11 +-- .../service/dataset/PermissionService.java | 86 +++++++++++++------ .../impl/direct/DirectFieldService.java | 7 +- frontend/src/lang/en.js | 6 +- frontend/src/lang/tw.js | 6 +- frontend/src/lang/zh.js | 6 +- 10 files changed, 186 insertions(+), 77 deletions(-) diff --git a/backend/src/main/java/io/dataease/commons/constants/ColumnPermissionConstants.java b/backend/src/main/java/io/dataease/commons/constants/ColumnPermissionConstants.java index 52f1a00796..69cfd65a94 100644 --- a/backend/src/main/java/io/dataease/commons/constants/ColumnPermissionConstants.java +++ b/backend/src/main/java/io/dataease/commons/constants/ColumnPermissionConstants.java @@ -4,7 +4,4 @@ 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/controller/dataset/DataSetTableFieldController.java b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java index 8b3f97c1e2..5aaf397c2e 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java @@ -19,6 +19,7 @@ import io.dataease.plugins.common.base.domain.DatasetTableField; import io.dataease.plugins.common.base.domain.Datasource; import io.dataease.plugins.datasource.entity.Dateformat; import io.dataease.plugins.datasource.query.QueryProvider; +import io.dataease.plugins.xpack.auth.dto.request.ColumnPermissionItem; import io.dataease.provider.ProviderFactory; import io.dataease.service.dataset.DataSetFieldService; import io.dataease.service.dataset.DataSetTableFieldsService; @@ -70,7 +71,7 @@ public class DataSetTableFieldController { DatasetTableField datasetTableField = DatasetTableField.builder().build(); datasetTableField.setTableId(tableId); List fields = dataSetTableFieldsService.list(datasetTableField); - fields = permissionService.filterColumnPermissions(fields, new ArrayList<>(), tableId, null); + fields = permissionService.filterColumnPermissions(fields, new HashMap<>(), tableId, null); return fields; } @@ -81,9 +82,9 @@ public class DataSetTableFieldController { DatasetTableField datasetTableField = DatasetTableField.builder().build(); datasetTableField.setTableId(tableId); List fields = dataSetTableFieldsService.list(datasetTableField); - List desensitizationList = new ArrayList<>(); + Map desensitizationList = new HashMap<>(); fields = permissionService.filterColumnPermissions(fields, desensitizationList, tableId, null); - fields = fields.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName())).collect(Collectors.toList()); + fields = fields.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName())).collect(Collectors.toList()); return fields; } 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 4ac293ebc8..afe3f3e316 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -47,6 +47,7 @@ import io.dataease.plugins.datasource.provider.Provider; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.view.entity.*; import io.dataease.plugins.view.service.ViewPluginService; +import io.dataease.plugins.xpack.auth.dto.request.ColumnPermissionItem; import io.dataease.provider.ProviderFactory; import io.dataease.service.chart.util.ChartDataBuild; import io.dataease.service.dataset.*; @@ -355,15 +356,15 @@ public class ChartViewService { checkPermission("use", table, requestList.getUser()); //列权限 - List desensitizationList = new ArrayList<>(); + Map desensitizationList = new HashMap<>(); List columnPermissionFields = permissionService.filterColumnPermissions(fields, desensitizationList, table.getId(), requestList.getUser()); //将没有权限的列删掉 List dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()); dataeaseNames.add("*"); - fieldCustomFilter = fieldCustomFilter.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - extStack = extStack.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - extBubble = extBubble.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - drill = drill.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + fieldCustomFilter = fieldCustomFilter.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + extStack = extStack.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + extBubble = extBubble.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + drill = drill.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); //行权限 @@ -379,7 +380,7 @@ public class ChartViewService { switch (view.getType()) { case "label": - xAxis = xAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); yAxis = new ArrayList<>(); if (CollectionUtils.isEmpty(xAxis)) { return new ArrayList(); @@ -389,7 +390,7 @@ public class ChartViewService { case "gauge": case "liquid": xAxis = new ArrayList<>(); - yAxis = yAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); if (CollectionUtils.isEmpty(yAxis)) { return new ArrayList(); } @@ -406,8 +407,8 @@ public class ChartViewService { yAxis = yAxis.stream().filter(item -> dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); break; default: - xAxis = xAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); - yAxis = yAxis.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> !desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName())).collect(Collectors.toList()); } List extFilterList = new ArrayList<>(); @@ -609,16 +610,16 @@ public class ChartViewService { DataSetTableDTO table = dataSetTableService.getWithPermission(view.getTableId(), chartExtRequest.getUser()); checkPermission("use", table, chartExtRequest.getUser()); - List desensitizationList = new ArrayList<>(); + Map desensitizationList = new HashMap<>(); //列权限 List columnPermissionFields = permissionService.filterColumnPermissions(fields, desensitizationList, table.getId(), chartExtRequest.getUser()); //将没有权限的列删掉 List dataeaseNames = columnPermissionFields.stream().map(DatasetTableField::getDataeaseName).collect(Collectors.toList()); dataeaseNames.add("*"); - fieldCustomFilter = fieldCustomFilter.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - extStack = extStack.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - extBubble = extBubble.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - drill = drill.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + fieldCustomFilter = fieldCustomFilter.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + extStack = extStack.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + extBubble = extBubble.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + drill = drill.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); //行权限 List rowPermissionsTree = permissionsTreeService.getRowPermissionsTree(fields, table, chartExtRequest.getUser()); @@ -649,7 +650,7 @@ public class ChartViewService { switch (view.getType()) { case "label": - xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); yAxis = new ArrayList<>(); if (CollectionUtils.isEmpty(xAxis)) { return emptyChartViewDTO(view); @@ -659,7 +660,7 @@ public class ChartViewService { case "gauge": case "liquid": xAxis = new ArrayList<>(); - yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); if (CollectionUtils.isEmpty(yAxis)) { return emptyChartViewDTO(view); } @@ -677,14 +678,14 @@ public class ChartViewService { break; case "bar-group": case "bar-group-stack": - xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - xAxisBase = xAxisBase.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - xAxisExt = xAxisExt.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxisBase = xAxisBase.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxisExt = xAxisExt.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); break; default: - xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); - yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + xAxis = xAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); + yAxis = yAxis.stream().filter(item -> chartViewFieldNameList.contains(item.getDataeaseName()) || (!desensitizationList.keySet().contains(item.getDataeaseName()) && dataeaseNames.contains(item.getDataeaseName()))).collect(Collectors.toList()); } // 过滤来自仪表板的条件 @@ -731,7 +732,7 @@ public class ChartViewService { if (datasetTableField == null) { continue; } - if (!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { + if (!desensitizationList.keySet().contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { if (CollectionUtils.isNotEmpty(filterRequest.getViewIds())) { if (filterRequest.getViewIds().contains(view.getId())) { @@ -756,7 +757,7 @@ public class ChartViewService { if (datasetTableField == null) { continue; } - if (!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { + if (!desensitizationList.keySet().contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { filterRequest.setDatasetTableField(datasetTableField); if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { if (CollectionUtils.isNotEmpty(filterRequest.getViewIds())) { @@ -789,7 +790,7 @@ public class ChartViewService { if (ObjectUtils.isNotEmpty(filters)) { for (ChartExtFilterRequest request : filters) { DatasetTableField datasetTableField = dataSetTableFieldsService.get(request.getFieldId()); - if (!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { + if (!desensitizationList.keySet().contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())) { request.setDatasetTableField(datasetTableField); if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { if (CollectionUtils.isNotEmpty(request.getViewIds())) { diff --git a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java index 7af383f8bd..8b4b96c90d 100644 --- a/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java +++ b/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java @@ -1,9 +1,9 @@ package io.dataease.service.chart.util; import io.dataease.plugins.common.base.domain.ChartViewWithBLOBs; -import io.dataease.commons.constants.ColumnPermissionConstants; import io.dataease.dto.chart.*; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; +import io.dataease.plugins.xpack.auth.dto.request.ColumnPermissionItem; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; @@ -162,7 +162,7 @@ public class ChartDataBuild { dataList.add(axisChartDataDTO); if ("line".equals(view.getType())) { - if (CollectionUtils.isEmpty(xAxisExt)){ + if (CollectionUtils.isEmpty(xAxisExt)) { axisChartDataDTO.setCategory(yAxis.get(j).getName()); } else { // 多指标只取第一个 @@ -938,7 +938,7 @@ public class ChartDataBuild { } // 表格 - public static Map transTableNormal(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, List desensitizationList) { + public static Map transTableNormal(List xAxis, List yAxis, ChartViewWithBLOBs view, List data, List extStack, Map desensitizationList) { List fields = new ArrayList<>(); if (ObjectUtils.isNotEmpty(xAxis)) { fields.addAll(xAxis); @@ -953,7 +953,7 @@ public class ChartDataBuild { } // 表格 - public static Map transTableNormal(Map> fieldMap, ChartViewWithBLOBs view, List data, List desensitizationList) { + public static Map transTableNormal(Map> fieldMap, ChartViewWithBLOBs view, List data, Map desensitizationList) { List fields = new ArrayList<>(); List yfields = new ArrayList<>(); @@ -983,14 +983,74 @@ public class ChartDataBuild { return transTableNormal(fields, view, data, desensitizationList); } - private static Map transTableNormal(List fields, ChartViewWithBLOBs view, List data, List desensitizationList) { + public static String desensitizationValue(ColumnPermissionItem columnPermissionItem, String originStr) { + String desensitizationStr = ""; + System.out.println(columnPermissionItem.getDesensitizationRule().getBuiltInRule().toString()); + if (!columnPermissionItem.getDesensitizationRule().getBuiltInRule().toString().equalsIgnoreCase("custom")) { + switch (columnPermissionItem.getDesensitizationRule().getBuiltInRule()) { + case CompleteDesensitization: + desensitizationStr = ColumnPermissionItem.CompleteDesensitization; + break; + case KeepMiddleThreeCharacters: + if (StringUtils.isEmpty(originStr) || originStr.length() < 4) { + desensitizationStr = ColumnPermissionItem.KeepMiddleThreeCharacters; + } else { + desensitizationStr = "***" + StringUtils.substring(originStr, originStr.length() / 2 - 1, originStr.length() / 2 + 2) + "***"; + } + break; + case KeepFirstAndLastThreeCharacters: + if (StringUtils.isEmpty(originStr) || originStr.length() < 7) { + desensitizationStr = ColumnPermissionItem.KeepFirstAndLastThreeCharacters; + } else { + desensitizationStr = StringUtils.substring(originStr, 0, 3) + "***" + StringUtils.substring(originStr, originStr.length() - 3, originStr.length()); + } + break; + default: + break; + + } + } else { + switch (columnPermissionItem.getDesensitizationRule().getCustomBuiltInRule()) { + case RetainBeforeMAndAfterN: + if (StringUtils.isEmpty(originStr) || originStr.length() < columnPermissionItem.getDesensitizationRule().getM() + columnPermissionItem.getDesensitizationRule().getN() + 1) { + desensitizationStr = String.join("", Collections.nCopies(columnPermissionItem.getDesensitizationRule().getM(), "X")) + "***" + Collections.nCopies(columnPermissionItem.getDesensitizationRule().getN(), "X"); + } else { + desensitizationStr = StringUtils.substring(originStr, 0, columnPermissionItem.getDesensitizationRule().getM() - 1) + "***" + StringUtils.substring(originStr, originStr.length() - columnPermissionItem.getDesensitizationRule().getN(), originStr.length() - 1); + } + break; + case RetainMToN: + if (columnPermissionItem.getDesensitizationRule().getM() > columnPermissionItem.getDesensitizationRule().getN()) { + desensitizationStr = "*** ***"; + break; + } + if (StringUtils.isEmpty(originStr) || originStr.length() < columnPermissionItem.getDesensitizationRule().getM()) { + desensitizationStr = "*** ***"; + break; + } + if (originStr.length() >= columnPermissionItem.getDesensitizationRule().getM() && originStr.length() >= columnPermissionItem.getDesensitizationRule().getN()) { + desensitizationStr = "***" + StringUtils.substring(originStr, columnPermissionItem.getDesensitizationRule().getM() - 1, columnPermissionItem.getDesensitizationRule().getN()) + "***"; + break; + } + if (originStr.length() >= columnPermissionItem.getDesensitizationRule().getN() && originStr.length() < columnPermissionItem.getDesensitizationRule().getN()) { + desensitizationStr = "***" + StringUtils.substring(originStr, columnPermissionItem.getDesensitizationRule().getM() - 1, originStr.length()); + } + break; + default: + break; + + } + } + return desensitizationStr; + } + + private static Map transTableNormal(List fields, ChartViewWithBLOBs view, List data, Map desensitizationList) { Map map = new TreeMap<>(); List> tableRow = new ArrayList<>(); data.forEach(ele -> { Map d = new HashMap<>(); for (int i = 0; i < fields.size(); i++) { - if (CollectionUtils.isNotEmpty(desensitizationList) && desensitizationList.contains(fields.get(i).getDataeaseName())) { - d.put(fields.get(i).getDataeaseName(), ColumnPermissionConstants.Desensitization_desc); + if (CollectionUtils.isNotEmpty(desensitizationList.keySet()) && desensitizationList.keySet().contains(fields.get(i).getDataeaseName())) { + d.put(fields.get(i).getDataeaseName(), desensitizationValue(desensitizationList.get(fields.get(i).getDataeaseName()), String.valueOf(ele[i]))); continue; } if (i == ele.length) break; @@ -1012,11 +1072,11 @@ public class ChartDataBuild { // 堆叠柱状图 if (CollectionUtils.isEmpty(xAxisExt)) { return transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill); - // 分组柱状图 + // 分组柱状图 } else if (CollectionUtils.isNotEmpty(xAxisExt) && CollectionUtils.isEmpty(extStack)) { return transBaseGroupDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill); - // 分组堆叠柱状图 - }else { + // 分组堆叠柱状图 + } else { Map map = new HashMap<>(); List dataList = new ArrayList<>(); diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 3e457fd9d2..9bea1637f4 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -43,9 +43,11 @@ import io.dataease.plugins.common.request.permission.DatasetRowPermissionsTreeOb import io.dataease.plugins.datasource.provider.Provider; import io.dataease.plugins.datasource.query.QueryProvider; import io.dataease.plugins.loader.ClassloaderResponsity; +import io.dataease.plugins.xpack.auth.dto.request.ColumnPermissionItem; import io.dataease.provider.DDLProvider; import io.dataease.provider.ProviderFactory; import io.dataease.provider.datasource.JdbcProvider; +import io.dataease.service.chart.util.ChartDataBuild; import io.dataease.service.datasource.DatasourceService; import io.dataease.service.engine.EngineService; import io.dataease.service.sys.SysAuthService; @@ -87,7 +89,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; -import static io.dataease.commons.constants.ColumnPermissionConstants.Desensitization_desc; /** * @Author gin @@ -523,7 +524,7 @@ public class DataSetTableService { datasetTableField.setTableId(dataSetTableRequest.getId()); datasetTableField.setChecked(Boolean.TRUE); List fields = dataSetTableFieldsService.list(datasetTableField); - fields = permissionService.filterColumnPermissions(fields, new ArrayList<>(), dataSetTableRequest.getId(), null); + fields = permissionService.filterColumnPermissions(fields, new HashMap<>(), dataSetTableRequest.getId(), null); List dimension = new ArrayList<>(); List quota = new ArrayList<>(); @@ -583,7 +584,7 @@ public class DataSetTableService { rowPermissionsTree.add(dto); } // 列权限 - List desensitizationList = new ArrayList<>(); + Map desensitizationList = new HashMap<>(); fields = permissionService.filterColumnPermissions(fields, desensitizationList, datasetTable.getId(), null); if (CollectionUtils.isEmpty(fields)) { map.put("fields", fields); @@ -945,8 +946,8 @@ public class DataSetTableService { jsonArray = data.stream().map(ele -> { Map tmpMap = new HashMap<>(); for (int i = 0; i < ele.length; i++) { - if (desensitizationList.contains(fieldArray[i])) { - tmpMap.put(fieldArray[i], Desensitization_desc); + if (desensitizationList.keySet().contains(fieldArray[i])) { + tmpMap.put(fieldArray[i], ChartDataBuild.desensitizationValue(desensitizationList.get(fieldArray[i]), String.valueOf(ele[i]))); } else { tmpMap.put(fieldArray[i], ele[i]); } diff --git a/backend/src/main/java/io/dataease/service/dataset/PermissionService.java b/backend/src/main/java/io/dataease/service/dataset/PermissionService.java index 4d91c1cc07..add7270d39 100644 --- a/backend/src/main/java/io/dataease/service/dataset/PermissionService.java +++ b/backend/src/main/java/io/dataease/service/dataset/PermissionService.java @@ -47,10 +47,11 @@ public class PermissionService { if (StringUtils.isEmpty(datasetRowPermissions.getFilter())) { continue; } - List lists = new Gson().fromJson(datasetRowPermissions.getFilter(), new TypeToken>(){}.getType()); + List lists = new Gson().fromJson(datasetRowPermissions.getFilter(), new TypeToken>() { + }.getType()); lists.forEach(chartCustomFilterDTO -> { chartCustomFilterDTO.setFieldId(field.getId()); - if(datasetRowPermissions.getAuthTargetType().equalsIgnoreCase("sysParams")){ + if (datasetRowPermissions.getAuthTargetType().equalsIgnoreCase("sysParams")) { chartCustomFilterDTO.setValue(values.get(chartCustomFilterDTO.getValue()).toString()); } }); @@ -62,9 +63,9 @@ public class PermissionService { if (StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())) { continue; } - if(datasetRowPermissions.getAuthTargetType().equalsIgnoreCase("sysParams")){ + if (datasetRowPermissions.getAuthTargetType().equalsIgnoreCase("sysParams")) { dto.setEnumCheckField(Arrays.asList(values.get(datasetRowPermissions.getEnumCheckField()).toString().split(",").clone())); - }else { + } else { dto.setEnumCheckField(Arrays.asList(datasetRowPermissions.getEnumCheckField().split(",").clone())); } customFilter.add(dto); @@ -73,24 +74,57 @@ public class PermissionService { return customFilter; } - public List filterColumnPermissions(List fields, List desensitizationList, String datasetTableId, Long user){ + //优先级依次为:user role dept + public List filterColumnPermissions(List fields, Map desensitizationList, String datasetTableId, Long user) { List result = new ArrayList<>(); - List allColumnPermissionItems = new ArrayList<>(); + + List userColumnPermissionItems = new ArrayList<>(); + List roleColumnPermissionItems = new ArrayList<>(); + List deptColumnPermissionItems = new ArrayList<>(); + for (DataSetColumnPermissionsDTO dataSetColumnPermissionsDTO : columnPermissions(datasetTableId, user)) { ColumnPermissions columnPermissions = new Gson().fromJson(dataSetColumnPermissionsDTO.getPermissions(), ColumnPermissions.class); - if(!columnPermissions.getEnable()){continue;} - allColumnPermissionItems.addAll(columnPermissions.getColumns().stream().filter(columnPermissionItem -> columnPermissionItem.getSelected()).collect(Collectors.toList())); + if (!columnPermissions.getEnable()) { + continue; + } + if (dataSetColumnPermissionsDTO.getAuthTargetType().equalsIgnoreCase("user")) { + userColumnPermissionItems.addAll(columnPermissions.getColumns().stream().filter(columnPermissionItem -> columnPermissionItem.getSelected()).collect(Collectors.toList())); + } + if (dataSetColumnPermissionsDTO.getAuthTargetType().equalsIgnoreCase("role")) { + roleColumnPermissionItems.addAll(columnPermissions.getColumns().stream().filter(columnPermissionItem -> columnPermissionItem.getSelected()).collect(Collectors.toList())); + } + if (dataSetColumnPermissionsDTO.getAuthTargetType().equalsIgnoreCase("dept")) { + deptColumnPermissionItems.addAll(columnPermissions.getColumns().stream().filter(columnPermissionItem -> columnPermissionItem.getSelected()).collect(Collectors.toList())); + } } - fields.forEach(field ->{ - List permissions = allColumnPermissionItems.stream().filter(columnPermissionItem -> columnPermissionItem.getId().equalsIgnoreCase(field.getId())).map(ColumnPermissionItem::getOpt).collect(Collectors.toList()); - if(CollectionUtils.isEmpty(permissions)){ - result.add(field); - }else { - if(!permissions.contains(ColumnPermissionConstants.Prohibit)){ - desensitizationList.add(field.getDataeaseName()); + + fields.forEach(field -> { + List fieldUserColumnPermissionItems = userColumnPermissionItems.stream().filter(columnPermissionItem -> columnPermissionItem.getId().equalsIgnoreCase(field.getId())).collect(Collectors.toList()); + List fieldRoleColumnPermissionItems = roleColumnPermissionItems.stream().filter(columnPermissionItem -> columnPermissionItem.getId().equalsIgnoreCase(field.getId())).collect(Collectors.toList()); + List fieldDeptColumnPermissionItems = deptColumnPermissionItems.stream().filter(columnPermissionItem -> columnPermissionItem.getId().equalsIgnoreCase(field.getId())).collect(Collectors.toList()); + + if (CollectionUtils.isNotEmpty(fieldUserColumnPermissionItems)) { + if (fieldUserColumnPermissionItems.stream().map(ColumnPermissionItem::getOpt).collect(Collectors.toList()).contains(ColumnPermissionConstants.Desensitization)) { + desensitizationList.put(field.getDataeaseName(), fieldUserColumnPermissionItems.get(0)); result.add(field); } + return; } + if (CollectionUtils.isNotEmpty(fieldRoleColumnPermissionItems)) { + if (fieldRoleColumnPermissionItems.stream().map(ColumnPermissionItem::getOpt).collect(Collectors.toList()).contains(ColumnPermissionConstants.Desensitization)) { + desensitizationList.put(field.getDataeaseName(), fieldUserColumnPermissionItems.get(0)); + result.add(field); + } + return; + } + if (CollectionUtils.isNotEmpty(fieldDeptColumnPermissionItems)) { + if (fieldDeptColumnPermissionItems.stream().map(ColumnPermissionItem::getOpt).collect(Collectors.toList()).contains(ColumnPermissionConstants.Desensitization)) { + desensitizationList.put(field.getDataeaseName(), fieldUserColumnPermissionItems.get(0)); + result.add(field); + } + return; + } + result.add(field); }); return result; } @@ -107,7 +141,7 @@ public class PermissionService { List roleIds = new ArrayList<>(); Long deptId = null; - if (userEntity == null ) { + if (userEntity == null) { return datasetRowPermissions; } if (userEntity.getIsAdmin()) { @@ -123,14 +157,14 @@ public class PermissionService { dataSetRowPermissionsDTO.setAuthTargetType("user"); datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO)); - if(CollectionUtils.isNotEmpty(roleIds)){ + if (CollectionUtils.isNotEmpty(roleIds)) { dataSetRowPermissionsDTO.setAuthTargetIds(roleIds); dataSetRowPermissionsDTO.setAuthTargetType("role"); datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO)); } - if(deptId != null){ + if (deptId != null) { dataSetRowPermissionsDTO.setAuthTargetIds(Collections.singletonList(deptId)); dataSetRowPermissionsDTO.setAuthTargetType("dept"); datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO)); @@ -160,7 +194,7 @@ public class PermissionService { List roleIds = new ArrayList<>(); Long deptId = null; - if (userEntity == null ) { + if (userEntity == null) { return datasetColumnPermissions; } if (userEntity.getIsAdmin()) { @@ -174,27 +208,29 @@ public class PermissionService { dataSetColumnPermissionsDTO.setAuthTargetIds(Collections.singletonList(userId)); dataSetColumnPermissionsDTO.setAuthTargetType("user"); datasetColumnPermissions.addAll(columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO)); - if(CollectionUtils.isNotEmpty(roleIds)){ + if (CollectionUtils.isNotEmpty(roleIds)) { dataSetColumnPermissionsDTO.setAuthTargetIds(roleIds); dataSetColumnPermissionsDTO.setAuthTargetType("role"); List roleColumnPermissionsDTOS = new ArrayList<>(); for (DataSetColumnPermissionsDTO columnPermissionsDTO : columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO)) { columnPermissionsDTO.getWhiteListUser(); - List userIdList = new Gson().fromJson(columnPermissionsDTO.getWhiteListUser(), new TypeToken>() {}.getType()); - if(CollectionUtils.isEmpty(userIdList) || !userIdList.contains(userId)){ + List userIdList = new Gson().fromJson(columnPermissionsDTO.getWhiteListUser(), new TypeToken>() { + }.getType()); + if (CollectionUtils.isEmpty(userIdList) || !userIdList.contains(userId)) { roleColumnPermissionsDTOS.add(columnPermissionsDTO); } } datasetColumnPermissions.addAll(roleColumnPermissionsDTOS); } - if(deptId != null){ + if (deptId != null) { dataSetColumnPermissionsDTO.setAuthTargetIds(Collections.singletonList(deptId)); dataSetColumnPermissionsDTO.setAuthTargetType("dept"); List deptColumnPermissionsDTOS = new ArrayList<>(); for (DataSetColumnPermissionsDTO columnPermissionsDTO : columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO)) { - List userIdList = new Gson().fromJson(columnPermissionsDTO.getWhiteListUser(), new TypeToken>() {}.getType()); - if(CollectionUtils.isEmpty(userIdList) || !userIdList.contains(userId)){ + List userIdList = new Gson().fromJson(columnPermissionsDTO.getWhiteListUser(), new TypeToken>() { + }.getType()); + if (CollectionUtils.isEmpty(userIdList) || !userIdList.contains(userId)) { deptColumnPermissionsDTOS.add(columnPermissionsDTO); } } diff --git a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java index 1d542f52b3..da93d0a65e 100644 --- a/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java +++ b/backend/src/main/java/io/dataease/service/dataset/impl/direct/DirectFieldService.java @@ -19,6 +19,7 @@ import io.dataease.plugins.common.request.datasource.DatasourceRequest; import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO; import io.dataease.plugins.datasource.provider.Provider; import io.dataease.plugins.datasource.query.QueryProvider; +import io.dataease.plugins.xpack.auth.dto.request.ColumnPermissionItem; import io.dataease.provider.ProviderFactory; import io.dataease.service.dataset.*; import io.dataease.service.datasource.DatasourceService; @@ -103,16 +104,16 @@ public class DirectFieldService implements DataSetFieldService { List rowPermissionsTree = new ArrayList<>(); if (userPermissions) { //列权限 - List desensitizationList = new ArrayList<>(); + Map desensitizationList = new HashMap<>(); fields = permissionService.filterColumnPermissions(fields, desensitizationList, datasetTable.getId(), userId); Map fieldMap = fields.stream().collect(Collectors.toMap(DatasetTableField::getId, node -> node)); permissionFields = fieldIds.stream().map(fieldMap::get).collect(Collectors.toList()); if (CollectionUtils.isEmpty(permissionFields) || permissionFields.get(0) == null) { return new ArrayList<>(); } - if (CollectionUtils.isNotEmpty(desensitizationList) && desensitizationList.contains(field.getDataeaseName())) { + if (CollectionUtils.isNotEmpty(desensitizationList.keySet()) && desensitizationList.keySet().contains(field.getDataeaseName())) { List results = new ArrayList<>(); - results.add(ColumnPermissionConstants.Desensitization_desc); + results.add(ColumnPermissionItem.CompleteDesensitization); return results; } //行权限 diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index c85d2224ef..75f96be823 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1682,7 +1682,11 @@ export default { enable: 'Enable', disable: 'Disable', prohibit: 'Prohibit', - desensitization: 'Desensitization' + desensitization: 'Desensitization', + desensitization_rule: 'Desensitization rule', + m: 'M ', + n: 'N ', + mgtn: 'M Cannot be greater than N' }, row_permissions: 'Row Permissions', column_permissions: 'Column Permissions', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 8ace68307a..378969cbc1 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1682,7 +1682,11 @@ export default { enable: '啟用', disable: '禁用', prohibit: '禁用', - desensitization: '脫敏' + desensitization: '脫敏', + desensitization_rule: '脱敏規則', + m: 'M等於', + n: 'N等於', + mgtn: 'M 不能大於 N' }, row_permissions: '行權限', column_permissions: '列權限', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 11dabf102d..b7f597b3ab 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1681,7 +1681,11 @@ export default { enable: '启用', disable: '禁用', prohibit: '禁用', - desensitization: '脱敏' + desensitization: '脱敏', + desensitization_rule: '脱敏规则', + m: 'M等于', + n: 'N等于', + mgtn: 'M 不能大于 N' }, row_permissions: '行权限', column_permissions: '列权限',