diff --git a/data-providers/data-provider-base/src/main/java/datart/data/provider/ProviderManager.java b/data-providers/data-provider-base/src/main/java/datart/data/provider/ProviderManager.java index 9927d994f..204758004 100644 --- a/data-providers/data-provider-base/src/main/java/datart/data/provider/ProviderManager.java +++ b/data-providers/data-provider-base/src/main/java/datart/data/provider/ProviderManager.java @@ -34,6 +34,7 @@ import java.sql.SQLException; import java.util.*; import java.util.concurrent.ConcurrentHashMap; +import java.util.regex.Pattern; @Service @Slf4j @@ -214,7 +215,8 @@ private void excludeColumns(Dataframe data, Set include) { .noneMatch(selectColumn -> column.columnKey().equals(selectColumn.getColumnKey()) || column.columnKey().equals(selectColumn.getAlias()) - || column.columnKey().contains(selectColumn.getColumnKey()))) { + // 用正则做聚合函数权限的判断 剔除原来的contains判断 + || Pattern.matches("(\\w+\\(" + selectColumn.getColumnKey() +"\\))",column.columnKey()) )) { excludeIndex.add(i); } } diff --git a/server/src/main/java/datart/server/service/impl/DataProviderServiceImpl.java b/server/src/main/java/datart/server/service/impl/DataProviderServiceImpl.java index 09495f663..b2cebbadc 100644 --- a/server/src/main/java/datart/server/service/impl/DataProviderServiceImpl.java +++ b/server/src/main/java/datart/server/service/impl/DataProviderServiceImpl.java @@ -406,6 +406,11 @@ private Set parseColumnPermission(View view) { try { Set columns = new HashSet<>(); List relSubjectColumns = rscMapper.listByUser(view.getId(), getCurrentUser().getId()); + if(relSubjectColumns.isEmpty()){ + return Collections.singleton(SelectColumn.of(null, "*")); + }else if(relSubjectColumns.size() == 1 && relSubjectColumns.get(0).getColumnPermission().equals("[]")){ + return Collections.singleton(SelectColumn.of(null, "''")); + } for (RelSubjectColumns relSubjectColumn : relSubjectColumns) { List cols = (List) objectMapper.readValue(relSubjectColumn.getColumnPermission(), ArrayList.class); if (!CollectionUtils.isEmpty(cols)) {