From 73ec9322276f834f3798f6e77f1a0078eaaae094 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Mon, 16 Jan 2023 15:25:38 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E8=A7=86=E5=9B=BE=E5=A2=9E=E5=8A=A0=E8=A1=8C=E6=9D=83=E9=99=90?= =?UTF-8?q?=E6=9C=BA=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/chart/ChartViewService.java | 7 ++- .../chart/ViewPluginBaseServiceImpl.java | 55 +++++++++++-------- 2 files changed, 35 insertions(+), 27 deletions(-) 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 7afe499902..2cb580c952 100644 --- a/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -444,7 +444,7 @@ public class ChartViewService { fieldMap.put("yAxis", yAxis); fieldMap.put("extStack", extStack); fieldMap.put("extBubble", extBubble); - PluginViewParam pluginViewParam = buildPluginParam(fieldMap, fieldCustomFilter, extFilterList, ds, table, view); + PluginViewParam pluginViewParam = buildPluginParam(fieldMap, fieldCustomFilter, extFilterList, ds, table, view, rowPermissionsTree); String sql = pluginViewSql(pluginViewParam, view); if (StringUtils.isBlank(sql)) { return new ArrayList(); @@ -908,7 +908,7 @@ public class ChartViewService { fieldMap.put("extBubble", extBubble); fieldMap.put("xAxis", xAxis); fieldMap.put("yAxis", yAxis); - PluginViewParam pluginViewParam = buildPluginParam(fieldMap, fieldCustomFilter, extFilterList, ds, table, view); + PluginViewParam pluginViewParam = buildPluginParam(fieldMap, fieldCustomFilter, extFilterList, ds, table, view, rowPermissionsTree); String sql = pluginViewSql(pluginViewParam, view); if (StringUtils.isBlank(sql)) { return emptyChartViewDTO(view); @@ -1358,7 +1358,7 @@ public class ChartViewService { return dto; } - private PluginViewParam buildPluginParam(Map> fieldMap, List customFilters, List extFilters, Datasource ds, DatasetTable table, ChartViewDTO view) { + private PluginViewParam buildPluginParam(Map> fieldMap, List customFilters, List extFilters, Datasource ds, DatasetTable table, ChartViewDTO view, List rowPermissionsTree) { PluginViewParam pluginViewParam = new PluginViewParam(); PluginViewSetImpl pluginViewSet = BeanUtils.copyBean(new PluginViewSetImpl(), table); pluginViewSet.setDsType(ds.getType()); @@ -1380,6 +1380,7 @@ public class ChartViewService { pluginViewParam.setPluginChartFieldCustomFilters(fieldFilters); pluginViewParam.setPluginChartExtFilters(panelFilters); pluginViewParam.setPluginViewLimit(pluginViewLimit); + pluginViewParam.setRowPermissionsTree(rowPermissionsTree); return pluginViewParam; } diff --git a/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java b/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java index 5b54376b2c..c77eba238c 100644 --- a/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java +++ b/backend/src/main/java/io/dataease/service/chart/ViewPluginBaseServiceImpl.java @@ -15,6 +15,7 @@ import io.dataease.plugins.common.dto.chart.ChartFieldCustomFilterDTO; import io.dataease.plugins.common.dto.chart.ChartViewFieldDTO; import io.dataease.plugins.common.dto.sqlObj.SQLObj; import io.dataease.plugins.common.request.chart.ChartExtFilterRequest; +import io.dataease.plugins.common.request.permission.DataSetRowPermissionsTreeDTO; import io.dataease.plugins.common.util.BeanUtils; import io.dataease.plugins.common.util.ConstantsUtil; import io.dataease.plugins.datasource.query.QueryProvider; @@ -74,9 +75,9 @@ public class ViewPluginBaseServiceImpl implements ViewPluginBaseService { String methodName = "transCustomFilterList"; SQLObj sqlObj = BeanUtils.copyBean(SQLObj.builder().build(), pluginViewSQL); List filters = list.stream().map(item -> gson.fromJson(gson.toJson(item), ChartFieldCustomFilterDTO.class)).collect(Collectors.toList()); - Object o ; + Object o; if ((o = execProviderMethod(queryProvider, methodName, sqlObj, filters)) != null) { - return (String)o; + return (String) o; } return null; } @@ -89,30 +90,38 @@ public class ViewPluginBaseServiceImpl implements ViewPluginBaseService { List filters = list.stream().map(item -> gson.fromJson(gson.toJson(item), ChartExtFilterRequest.class)).collect(Collectors.toList()); Object o; if ((o = execProviderMethod(queryProvider, methodName, sqlObj, filters)) != null) { - return (String)o; + return (String) o; } return null; } + @Override + public String permissionWhere(String s, List list, PluginViewSQL pluginViewSQL) { + QueryProvider queryProvider = ProviderFactory.getQueryProvider(s); + SQLObj sqlObj = BeanUtils.copyBean(SQLObj.builder().build(), pluginViewSQL); + return queryProvider.transFilterTrees(sqlObj, list); + } + private String sqlFix(String sql) { if (sql.lastIndexOf(";") == (sql.length() - 1)) { sql = sql.substring(0, sql.length() - 1); } return sql; } + @Override public PluginViewSQL getTableObj(PluginViewSet pluginViewSet) { String tableName = null; DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(pluginViewSet.getInfo(), DataTableInfoDTO.class); if (ObjectUtils.isNotEmpty(pluginViewSet.getMode()) && 1 == pluginViewSet.getMode()) { tableName = TableUtils.tableName(pluginViewSet.getTableId()); - }else { + } else { switch (DatasetType.getEnumObjByKey(pluginViewSet.getType())) { case DB: tableName = dataTableInfoDTO.getTable(); break; case SQL: - String sql = dataTableInfoDTO.isBase64Encryption()? new String(java.util.Base64.getDecoder().decode(dataTableInfoDTO.getSql())): dataTableInfoDTO.getSql(); + String sql = dataTableInfoDTO.isBase64Encryption() ? new String(java.util.Base64.getDecoder().decode(dataTableInfoDTO.getSql())) : dataTableInfoDTO.getSql(); tableName = dataSetTableService.handleVariableDefaultValue(sql, null, pluginViewSet.getDsType()); tableName = "(" + sqlFix(tableName) + ")"; @@ -139,7 +148,7 @@ public class ViewPluginBaseServiceImpl implements ViewPluginBaseService { PluginViewSQL tableObj = PluginViewSQL.builder().tableName(realTableName).tableAlias(tableAlias).build(); QueryProvider queryProvider = ProviderFactory.getQueryProvider(pluginViewSet.getDsType()); SQLObj sqlObj = SQLObj.builder().tableName(realTableName).tableAlias(tableAlias).build(); - PluginViewSetImpl child = (PluginViewSetImpl)pluginViewSet; + PluginViewSetImpl child = (PluginViewSetImpl) pluginViewSet; queryProvider.setSchema(sqlObj, child.getDs()); tableObj.setTableName(sqlObj.getTableName()); tableObj.setTableAlias(sqlObj.getTableAlias()); @@ -149,9 +158,9 @@ public class ViewPluginBaseServiceImpl implements ViewPluginBaseService { private String getOriginName(String dsType, PluginViewField pluginViewField, PluginViewSQL tableObj) { String keyword_fix = ConstantsUtil.constantsValue(dsType, "KEYWORD_FIX"); String originField; - String reflectField = reflectFieldName(dsType, pluginViewField); + String reflectField = reflectFieldName(dsType, pluginViewField); if (ObjectUtils.isNotEmpty(pluginViewField.getExtField()) && pluginViewField.getExtField() == 2) { - originField = calcFieldRegex(dsType,pluginViewField.getOriginName(), tableObj); + originField = calcFieldRegex(dsType, pluginViewField.getOriginName(), tableObj); } else if (ObjectUtils.isNotEmpty(pluginViewField.getExtField()) && pluginViewField.getExtField() == 1) { originField = String.format(keyword_fix, tableObj.getTableAlias(), StringUtils.isNotBlank(reflectField) ? reflectField : pluginViewField.getOriginName()); } else { @@ -164,38 +173,37 @@ public class ViewPluginBaseServiceImpl implements ViewPluginBaseService { QueryProvider queryProvider = ProviderFactory.getQueryProvider(dsType); String methodName = "calcFieldRegex"; SQLObj sqlObj = BeanUtils.copyBean(SQLObj.builder().build(), pluginViewSQL); - Object o ; + Object o; if ((o = execProviderMethod(queryProvider, methodName, originField, sqlObj)) != null) { - return (String)o; + return (String) o; } return null; } - private String reflectFieldName(String dsType, PluginViewField pluginViewField ) { + private String reflectFieldName(String dsType, PluginViewField pluginViewField) { QueryProvider queryProvider = ProviderFactory.getQueryProvider(dsType); String methodName = "reflectFieldName"; - DatasetTableField field = BeanUtils.copyBean(new DatasetTableField(), pluginViewField);; - Object o ; + DatasetTableField field = BeanUtils.copyBean(new DatasetTableField(), pluginViewField); + Object o; if ((o = execProviderMethod(queryProvider, methodName, field)) != null) { - return (String)o; + return (String) o; } return null; } - private PluginViewSQL getField(String dsType, PluginViewField field, String originField, String fieldAlias) { QueryProvider queryProvider = ProviderFactory.getQueryProvider(dsType); String methodName; if (StringUtils.equals(field.getTypeField(), "xAxis") || StringUtils.equals(field.getTypeField(), "extStack")) { methodName = "getXFields"; - }else { + } else { methodName = "getYFields"; } ChartViewFieldDTO chartViewFieldDTO = BeanUtils.copyBean(new ChartViewFieldDTO(), field); Object execResult; - if ((execResult = execProviderMethod(queryProvider, methodName, chartViewFieldDTO, originField, fieldAlias)) != null){ - SQLObj sqlObj = (SQLObj)execResult; + if ((execResult = execProviderMethod(queryProvider, methodName, chartViewFieldDTO, originField, fieldAlias)) != null) { + SQLObj sqlObj = (SQLObj) execResult; PluginViewSQL result = PluginViewSQL.builder().build(); return BeanUtils.copyBean(result, sqlObj); } @@ -215,27 +223,26 @@ public class ViewPluginBaseServiceImpl implements ViewPluginBaseService { } - - private PluginViewSQL addSort(String sort, String originField, String fieldAlias) { + private PluginViewSQL addSort(String sort, String originField, String fieldAlias) { if (StringUtils.isNotEmpty(sort) && !StringUtils.equalsIgnoreCase(sort, "none")) { return PluginViewSQL.builder().orderField(originField).orderAlias(fieldAlias).orderDirection(sort).build(); } return null; } - private String getWhere(String dsType, PluginViewField field,String originField,String fieldAlias) { + private String getWhere(String dsType, PluginViewField field, String originField, String fieldAlias) { QueryProvider queryProvider = ProviderFactory.getQueryProvider(dsType); String methodName; if (StringUtils.equals(field.getTypeField(), "xAxis") || StringUtils.equals(field.getTypeField(), "extStack")) { return null; - }else { + } else { methodName = "getYWheres"; } ChartViewFieldDTO chartViewFieldDTO = BeanUtils.copyBean(new ChartViewFieldDTO(), field); Object execResult; - if ((execResult = execProviderMethod(queryProvider, methodName, chartViewFieldDTO, originField, fieldAlias)) != null){ - String where = (String)execResult; + if ((execResult = execProviderMethod(queryProvider, methodName, chartViewFieldDTO, originField, fieldAlias)) != null) { + String where = (String) execResult; return where; } return null;