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 50403b2892..4ef2b9b0eb 100644 --- a/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java +++ b/backend/src/main/java/io/dataease/controller/dataset/DataSetTableFieldController.java @@ -61,6 +61,19 @@ public class DataSetTableFieldController { return fields; } + @ApiOperation("查询表下属字段") + @PostMapping("listWithPermission/{tableId}") + public List listWithPermission(@PathVariable String tableId) { + DatasetTableField datasetTableField = DatasetTableField.builder().build(); + datasetTableField.setTableId(tableId); + List fields = dataSetTableFieldsService.list(datasetTableField); + List desensitizationList = new ArrayList<>(); + fields = permissionService.filterColumnPermissons(fields, desensitizationList, tableId, null); + fields = fields.stream().filter(item -> !desensitizationList.contains(item.getDataeaseName())).collect(Collectors.toList()); + return fields; + } + + //管理权限,可以列出所有字段 @ApiOperation("查询表下属字段") @PostMapping("listForPermissionSeting/{tableId}") public List listForPermissionSeting(@PathVariable String tableId) { @@ -70,6 +83,7 @@ public class DataSetTableFieldController { return fields; } + //管理权限,可以列出所有字段 @ApiOperation("分组查询表下属字段") @PostMapping("listByDQ/{tableId}") public DatasetTableField4Type listByDQ(@PathVariable String tableId) { @@ -77,10 +91,8 @@ public class DataSetTableFieldController { datasetTableField.setTableId(tableId); datasetTableField.setGroupType("d"); List dimensionList = dataSetTableFieldsService.list(datasetTableField); - dimensionList = permissionService.filterColumnPermissons(dimensionList, new ArrayList<>(), tableId, null); datasetTableField.setGroupType("q"); List quotaList = dataSetTableFieldsService.list(datasetTableField); - quotaList = permissionService.filterColumnPermissons(quotaList, new ArrayList<>(), tableId, null); DatasetTableField4Type datasetTableField4Type = new DatasetTableField4Type(); datasetTableField4Type.setDimensionList(dimensionList); @@ -134,7 +146,30 @@ public class DataSetTableFieldController { public List multFieldValues(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception { List results = new ArrayList<>(); for (String fieldId : multFieldValuesRequest.getFieldIds()) { - List fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId()); + List fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId(), true); + if (CollectionUtil.isNotEmpty(fieldValues)) { + results.addAll(fieldValues); + } + + } + ArrayList list = results.stream().collect( + Collectors.collectingAndThen( + Collectors.toCollection( + () -> new TreeSet<>(Comparator.comparing(t -> { + if (ObjectUtils.isEmpty(t)) + return ""; + return t.toString(); + }))), + ArrayList::new)); + return list; + } + + @ApiOperation("多字段值枚举") + @PostMapping("multFieldValuesForPermissions") + public List multFieldValuesForPermissions(@RequestBody MultFieldValuesRequest multFieldValuesRequest) throws Exception { + List results = new ArrayList<>(); + for (String fieldId : multFieldValuesRequest.getFieldIds()) { + List fieldValues = dataSetFieldService.fieldValues(fieldId, multFieldValuesRequest.getUserId(), false); if (CollectionUtil.isNotEmpty(fieldValues)) { results.addAll(fieldValues); } 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 1ea9ba9245..83a8946f65 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -305,14 +305,19 @@ public class ChartViewService { filterRequest.setFieldId(fId); DatasetTableField datasetTableField = dataSetTableFieldsService.get(fId); - filterRequest.setDatasetTableField(datasetTableField); - if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { - if (CollectionUtils.isNotEmpty(filterRequest.getViewIds())) { - if (filterRequest.getViewIds().contains(view.getId())) { + if(datasetTableField == null){ + continue; + } + if(!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())){ + filterRequest.setDatasetTableField(datasetTableField); + if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { + if (CollectionUtils.isNotEmpty(filterRequest.getViewIds())) { + if (filterRequest.getViewIds().contains(view.getId())) { + extFilterList.add(filterRequest); + } + } else { extFilterList.add(filterRequest); } - } else { - extFilterList.add(filterRequest); } } } @@ -324,14 +329,16 @@ public class ChartViewService { if (ObjectUtils.isNotEmpty(requestList.getLinkageFilters())) { for (ChartExtFilterRequest request : requestList.getLinkageFilters()) { DatasetTableField datasetTableField = dataSetTableFieldsService.get(request.getFieldId()); - request.setDatasetTableField(datasetTableField); - if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { - if (CollectionUtils.isNotEmpty(request.getViewIds())) { - if (request.getViewIds().contains(view.getId())) { + if(!desensitizationList.contains(datasetTableField.getDataeaseName()) && dataeaseNames.contains(datasetTableField.getDataeaseName())){ + request.setDatasetTableField(datasetTableField); + if (StringUtils.equalsIgnoreCase(datasetTableField.getTableId(), view.getTableId())) { + if (CollectionUtils.isNotEmpty(request.getViewIds())) { + if (request.getViewIds().contains(view.getId())) { + extFilterList.add(request); + } + } else { extFilterList.add(request); } - } else { - extFilterList.add(request); } } } diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java index 8f8a178dcf..1f59651366 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetFieldService.java @@ -5,5 +5,5 @@ import java.util.List; public interface DataSetFieldService { - List fieldValues(String fieldId, Long userId) throws Exception; + List fieldValues(String fieldId, Long userId, Boolean userPermissions) throws Exception; } 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 dcc84db5af..ea36b7d970 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 @@ -42,7 +42,7 @@ public class DirectFieldService implements DataSetFieldService { private PermissionService permissionService; @Override - public List fieldValues(String fieldId, Long userId) throws Exception { + public List fieldValues(String fieldId, Long userId, Boolean userPermissions) throws Exception { DatasetTableField field = dataSetTableFieldsService.selectByPrimaryKey(fieldId); if (field == null || StringUtils.isEmpty(field.getTableId())) return null; @@ -52,23 +52,24 @@ public class DirectFieldService implements DataSetFieldService { DatasetTableField datasetTableField = DatasetTableField.builder().tableId(field.getTableId()).checked(Boolean.TRUE).build(); List fields = dataSetTableFieldsService.list(datasetTableField); - //列权限 - List desensitizationList = new ArrayList<>(); - fields = permissionService.filterColumnPermissons(fields, desensitizationList, datasetTable.getId(), userId); - - //禁用的 - if(!fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()).contains(fieldId)){ - return new ArrayList<>(); + List customFilter = new ArrayList<>(); + if(userPermissions){ + //列权限 + List desensitizationList = new ArrayList<>(); + fields = permissionService.filterColumnPermissons(fields, desensitizationList, datasetTable.getId(), userId); + //禁用的 + if(!fields.stream().map(DatasetTableField::getId).collect(Collectors.toList()).contains(fieldId)){ + return new ArrayList<>(); + } + if (CollectionUtils.isNotEmpty(desensitizationList) && desensitizationList.contains(field.getDataeaseName())) { + List results = new ArrayList<>(); + results.add(ColumnPermissionConstants.Desensitization_desc); + return results; + } + //行权限 + customFilter = permissionService.getCustomFilters(fields, datasetTable, userId); } - if (CollectionUtils.isNotEmpty(desensitizationList) && desensitizationList.contains(field.getDataeaseName())) { - List results = new ArrayList<>(); - results.add(ColumnPermissionConstants.Desensitization_desc); - return results; - } - //行权限 - List customFilter = permissionService.getCustomFilters(fields, datasetTable, userId); - DatasourceRequest datasourceRequest = new DatasourceRequest(); DatasourceProvider datasourceProvider = null; if (datasetTable.getMode() == 0) {// 直连 diff --git a/frontend/src/api/dataset/dataset.js b/frontend/src/api/dataset/dataset.js index f177d0683a..6167a87d2d 100644 --- a/frontend/src/api/dataset/dataset.js +++ b/frontend/src/api/dataset/dataset.js @@ -103,6 +103,14 @@ export function fieldList(id, showLoading = true) { }) } +export function fieldListWithPermission(id, showLoading = true) { + return request({ + url: '/dataset/field/listWithPermission/' + id, + loading: showLoading, + method: 'post' + }) +} + export function fieldListDQ(id, showLoading = true) { return request({ url: '/dataset/field/listByDQ/' + id, diff --git a/frontend/src/components/canvas/components/Editor/Preview.vue b/frontend/src/components/canvas/components/Editor/Preview.vue index dcf17e9d05..4922bbe0f6 100644 --- a/frontend/src/components/canvas/components/Editor/Preview.vue +++ b/frontend/src/components/canvas/components/Editor/Preview.vue @@ -40,7 +40,6 @@ diff --git a/frontend/src/views/panel/filter/filterDialog.vue b/frontend/src/views/panel/filter/filterDialog.vue index 67c4c817ff..efbf3df595 100644 --- a/frontend/src/views/panel/filter/filterDialog.vue +++ b/frontend/src/views/panel/filter/filterDialog.vue @@ -184,7 +184,7 @@ import { } from 'vuex' import { groupTree, - fieldList, + fieldListWithPermission, post } from '@/api/dataset/dataset' import { @@ -489,7 +489,7 @@ export default { }, loadField(tableId) { - fieldList(tableId).then(res => { + fieldListWithPermission(tableId).then(res => { let datas = res.data if (this.widget && this.widget.filterFieldMethod) { datas = this.widget.filterFieldMethod(datas) @@ -498,7 +498,7 @@ export default { }) }, comLoadField(tableId) { - fieldList(tableId).then(res => { + fieldListWithPermission(tableId).then(res => { let datas = res.data if (this.widget && this.widget.filterFieldMethod) { datas = this.widget.filterFieldMethod(datas)