forked from github/dataease
feat: 数据集列权限
This commit is contained in:
parent
d5164d59a0
commit
7d90a503c9
@ -207,7 +207,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.dataease</groupId>
|
<groupId>io.dataease</groupId>
|
||||||
<artifactId>dataease-plugin-interface</artifactId>
|
<artifactId>dataease-plugin-interface</artifactId>
|
||||||
<version>1.6</version>
|
<version>1.7</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cn.hutool</groupId>
|
<groupId>cn.hutool</groupId>
|
||||||
|
@ -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 = "******";
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -19,7 +19,7 @@ public class DefaultLicenseService {
|
|||||||
private InnerLicenseService innerLicenseService;
|
private InnerLicenseService innerLicenseService;
|
||||||
|
|
||||||
private static final String LICENSE_ID = "fit2cloud_license";
|
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";
|
private static final String product = "DataEase";
|
||||||
|
|
||||||
public F2CLicenseResponse validateLicense(String product, String licenseKey) {
|
public F2CLicenseResponse validateLicense(String product, String licenseKey) {
|
||||||
|
@ -6,6 +6,7 @@ import io.dataease.base.domain.*;
|
|||||||
import io.dataease.base.mapper.ChartViewMapper;
|
import io.dataease.base.mapper.ChartViewMapper;
|
||||||
import io.dataease.base.mapper.ext.ExtChartGroupMapper;
|
import io.dataease.base.mapper.ext.ExtChartGroupMapper;
|
||||||
import io.dataease.base.mapper.ext.ExtChartViewMapper;
|
import io.dataease.base.mapper.ext.ExtChartViewMapper;
|
||||||
|
import io.dataease.commons.constants.ColumnPermissionConstants;
|
||||||
import io.dataease.commons.constants.CommonConstants;
|
import io.dataease.commons.constants.CommonConstants;
|
||||||
import io.dataease.commons.constants.JdbcConstants;
|
import io.dataease.commons.constants.JdbcConstants;
|
||||||
import io.dataease.commons.utils.AuthUtils;
|
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.DataSetTableFieldsService;
|
||||||
import io.dataease.service.dataset.DataSetTableService;
|
import io.dataease.service.dataset.DataSetTableService;
|
||||||
import io.dataease.service.dataset.DataSetTableUnionService;
|
import io.dataease.service.dataset.DataSetTableUnionService;
|
||||||
|
import io.dataease.service.dataset.PermissionService;
|
||||||
import io.dataease.service.datasource.DatasourceService;
|
import io.dataease.service.datasource.DatasourceService;
|
||||||
import org.apache.commons.collections4.CollectionUtils;
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
@ -41,6 +43,8 @@ import java.util.*;
|
|||||||
import java.util.concurrent.locks.ReentrantLock;
|
import java.util.concurrent.locks.ReentrantLock;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static io.dataease.commons.constants.ColumnPermissionConstants.Desensitization_desc;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author gin
|
* @Author gin
|
||||||
* @Date 2021/3/1 12:34 下午
|
* @Date 2021/3/1 12:34 下午
|
||||||
@ -61,6 +65,8 @@ public class ChartViewService {
|
|||||||
private ExtChartGroupMapper extChartGroupMapper;
|
private ExtChartGroupMapper extChartGroupMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private DataSetTableUnionService dataSetTableUnionService;
|
private DataSetTableUnionService dataSetTableUnionService;
|
||||||
|
@Resource
|
||||||
|
private PermissionService permissionService;
|
||||||
|
|
||||||
//默认使用非公平
|
//默认使用非公平
|
||||||
private ReentrantLock lock = new ReentrantLock();
|
private ReentrantLock lock = new ReentrantLock();
|
||||||
@ -187,6 +193,25 @@ public class ChartViewService {
|
|||||||
return calcData(view, request, request.isCache());
|
return calcData(view, request, request.isCache());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void checkPermissions(List<? extends ChartViewFieldBaseDTO> chartViewFieldDTOS, List<DatasetTableField> fields, List<String> 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 {
|
public ChartViewDTO calcData(ChartViewDTO view, ChartExtRequest requestList, boolean cache) throws Exception {
|
||||||
if (ObjectUtils.isEmpty(view)) {
|
if (ObjectUtils.isEmpty(view)) {
|
||||||
throw new RuntimeException(Translator.get("i18n_chart_delete"));
|
throw new RuntimeException(Translator.get("i18n_chart_delete"));
|
||||||
@ -208,39 +233,52 @@ public class ChartViewService {
|
|||||||
}.getType());
|
}.getType());
|
||||||
List<ChartViewFieldDTO> drill = new Gson().fromJson(view.getDrillFields(), new TypeToken<List<ChartViewFieldDTO>>() {
|
List<ChartViewFieldDTO> drill = new Gson().fromJson(view.getDrillFields(), new TypeToken<List<ChartViewFieldDTO>>() {
|
||||||
}.getType());
|
}.getType());
|
||||||
// 获取对应数据集行权限
|
|
||||||
|
|
||||||
DatasetTableField datasetTableFieldObj = DatasetTableField.builder().tableId(view.getTableId()).checked(Boolean.TRUE).build();
|
DatasetTableField datasetTableFieldObj = DatasetTableField.builder().tableId(view.getTableId()).checked(Boolean.TRUE).build();
|
||||||
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableFieldObj);
|
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableFieldObj);
|
||||||
DatasetTable datasetTable = dataSetTableService.get(view.getTableId());
|
DatasetTable datasetTable = dataSetTableService.get(view.getTableId());
|
||||||
List<ChartFieldCustomFilterDTO> permissionFields = dataSetTableService.getCustomFilters(fields, datasetTable, requestList.getUser());
|
|
||||||
|
//列权限
|
||||||
|
List<String> desensitizationList = new ArrayList<>();
|
||||||
|
fields = permissionService.filterColumnPermissons(fields, desensitizationList, datasetTable, null);
|
||||||
|
checkPermissions(fieldCustomFilter, fields, desensitizationList, false);
|
||||||
|
//行权限
|
||||||
|
List<ChartFieldCustomFilterDTO> permissionFields = permissionService.getCustomFilters(fields, datasetTable, requestList.getUser());
|
||||||
fieldCustomFilter.addAll(permissionFields);
|
fieldCustomFilter.addAll(permissionFields);
|
||||||
|
|
||||||
for (ChartFieldCustomFilterDTO ele : fieldCustomFilter) {
|
for (ChartFieldCustomFilterDTO ele : fieldCustomFilter) {
|
||||||
ele.setField(dataSetTableFieldsService.get(ele.getId()));
|
ele.setField(dataSetTableFieldsService.get(ele.getId()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.equalsIgnoreCase("text", view.getType())
|
if (CollectionUtils.isEmpty(xAxis) && CollectionUtils.isEmpty(yAxis)) {
|
||||||
|| StringUtils.equalsIgnoreCase("gauge", view.getType())
|
return emptyChartViewDTO(view);
|
||||||
|| StringUtils.equalsIgnoreCase("liquid", view.getType())) {
|
}
|
||||||
xAxis = new ArrayList<>();
|
|
||||||
if (CollectionUtils.isEmpty(yAxis)) {
|
switch (view.getType()){
|
||||||
ChartViewDTO dto = new ChartViewDTO();
|
case "text":
|
||||||
BeanUtils.copyBean(dto, view);
|
case "gauge":
|
||||||
return dto;
|
case "liquid":
|
||||||
}
|
xAxis = new ArrayList<>();
|
||||||
} else if (StringUtils.equalsIgnoreCase("table-info", view.getType())) {
|
checkPermissions(yAxis, fields, desensitizationList, false);
|
||||||
yAxis = new ArrayList<>();
|
if (CollectionUtils.isEmpty(yAxis)) {
|
||||||
if (CollectionUtils.isEmpty(xAxis)) {
|
return emptyChartViewDTO(view);
|
||||||
ChartViewDTO dto = new ChartViewDTO();
|
}
|
||||||
BeanUtils.copyBean(dto, view);
|
break;
|
||||||
return dto;
|
case "table-info":
|
||||||
}
|
yAxis = new ArrayList<>();
|
||||||
} else {
|
checkPermissions(xAxis, fields, desensitizationList, true);
|
||||||
if (CollectionUtils.isEmpty(xAxis) && CollectionUtils.isEmpty(yAxis)) {
|
if (CollectionUtils.isEmpty(xAxis)) {
|
||||||
ChartViewDTO dto = new ChartViewDTO();
|
return emptyChartViewDTO(view);
|
||||||
BeanUtils.copyBean(dto, view);
|
}
|
||||||
return dto;
|
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)) {
|
if (ObjectUtils.isEmpty(ds)) {
|
||||||
throw new RuntimeException(Translator.get("i18n_datasource_delete"));
|
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"));
|
throw new Exception(Translator.get("i18n_invalid_ds"));
|
||||||
}
|
}
|
||||||
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
DatasourceProvider datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||||
@ -569,7 +607,7 @@ public class ChartViewService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// table组件,明细表,也用于导出数据
|
// table组件,明细表,也用于导出数据
|
||||||
Map<String, Object> mapTableNormal = transTableNormal(xAxis, yAxis, view, data, extStack);
|
Map<String, Object> mapTableNormal = transTableNormal(xAxis, yAxis, view, data, extStack, desensitizationList);
|
||||||
|
|
||||||
map.putAll(mapChart);
|
map.putAll(mapChart);
|
||||||
map.putAll(mapTableNormal);
|
map.putAll(mapTableNormal);
|
||||||
@ -587,6 +625,12 @@ public class ChartViewService {
|
|||||||
return dto;
|
return dto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ChartViewDTO emptyChartViewDTO(ChartViewDTO view) {
|
||||||
|
ChartViewDTO dto = new ChartViewDTO();
|
||||||
|
BeanUtils.copyBean(dto, view);
|
||||||
|
return dto;
|
||||||
|
}
|
||||||
|
|
||||||
private boolean checkCalcType(String dateStyle, String calcType) {
|
private boolean checkCalcType(String dateStyle, String calcType) {
|
||||||
switch (dateStyle) {
|
switch (dateStyle) {
|
||||||
case "y":
|
case "y":
|
||||||
@ -1510,7 +1554,7 @@ public class ChartViewService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 表格
|
// 表格
|
||||||
private Map<String, Object> transTableNormal(List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, ChartViewWithBLOBs view, List<String[]> data, List<ChartViewFieldDTO> extStack) {
|
private Map<String, Object> transTableNormal(List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, ChartViewWithBLOBs view, List<String[]> data, List<ChartViewFieldDTO> extStack, List<String> desensitizationList) {
|
||||||
Map<String, Object> map = new TreeMap<>();
|
Map<String, Object> map = new TreeMap<>();
|
||||||
List<ChartViewFieldDTO> fields = new ArrayList<>();
|
List<ChartViewFieldDTO> fields = new ArrayList<>();
|
||||||
List<Map<String, Object>> tableRow = new ArrayList<>();
|
List<Map<String, Object>> tableRow = new ArrayList<>();
|
||||||
@ -1526,9 +1570,14 @@ public class ChartViewService {
|
|||||||
data.forEach(ele -> {
|
data.forEach(ele -> {
|
||||||
Map<String, Object> d = new HashMap<>();
|
Map<String, Object> d = new HashMap<>();
|
||||||
for (int i = 0; i < fields.size(); i++) {
|
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);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
ChartViewFieldDTO chartViewFieldDTO = fields.get(i);
|
ChartViewFieldDTO chartViewFieldDTO = fields.get(i);
|
||||||
if (chartViewFieldDTO.getDeType() == 0 || chartViewFieldDTO.getDeType() == 1) {
|
if (chartViewFieldDTO.getDeType() == 0 || chartViewFieldDTO.getDeType() == 1) {
|
||||||
d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? "" : ele[i]);
|
d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? "" : ele[i]);
|
||||||
} else if (chartViewFieldDTO.getDeType() == 2 || chartViewFieldDTO.getDeType() == 3) {
|
} else if (chartViewFieldDTO.getDeType() == 2 || chartViewFieldDTO.getDeType() == 3) {
|
||||||
d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? null : new BigDecimal(ele[i]).setScale(2, RoundingMode.HALF_UP));
|
d.put(fields.get(i).getDataeaseName(), StringUtils.isEmpty(ele[i]) ? null : new BigDecimal(ele[i]).setScale(2, RoundingMode.HALF_UP));
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,10 @@ public class DataSetTableFieldsService {
|
|||||||
return datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
|
return datasetTableFieldMapper.selectByExample(datasetTableFieldExample);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DatasetTableField selectByPrimaryKey(String id) {
|
||||||
|
return datasetTableFieldMapper.selectByPrimaryKey(id);
|
||||||
|
}
|
||||||
|
|
||||||
public List<DatasetTableField> getListByIdsEach(List<String> ids) {
|
public List<DatasetTableField> getListByIdsEach(List<String> ids) {
|
||||||
List<DatasetTableField> list = new ArrayList<>();
|
List<DatasetTableField> list = new ArrayList<>();
|
||||||
if (CollectionUtils.isNotEmpty(ids)) {
|
if (CollectionUtils.isNotEmpty(ids)) {
|
||||||
|
@ -1,21 +1,12 @@
|
|||||||
package io.dataease.service.dataset;
|
package io.dataease.service.dataset;
|
||||||
|
|
||||||
|
|
||||||
import com.alibaba.fastjson.JSONObject;
|
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import io.dataease.auth.api.dto.CurrentRoleDto;
|
|
||||||
import io.dataease.auth.api.dto.CurrentUserDto;
|
|
||||||
import io.dataease.auth.entity.SysUserEntity;
|
|
||||||
import io.dataease.auth.service.AuthUserService;
|
|
||||||
import io.dataease.base.domain.*;
|
import io.dataease.base.domain.*;
|
||||||
import io.dataease.base.mapper.*;
|
import io.dataease.base.mapper.*;
|
||||||
import io.dataease.base.mapper.ext.ExtDataSetGroupMapper;
|
import io.dataease.base.mapper.ext.ExtDataSetGroupMapper;
|
||||||
import io.dataease.base.mapper.ext.ExtDataSetTableMapper;
|
import io.dataease.base.mapper.ext.ExtDataSetTableMapper;
|
||||||
import io.dataease.base.mapper.ext.UtilMapper;
|
import io.dataease.base.mapper.ext.UtilMapper;
|
||||||
import io.dataease.commons.constants.DatasourceTypes;
|
import io.dataease.commons.constants.*;
|
||||||
import io.dataease.commons.constants.JobStatus;
|
|
||||||
import io.dataease.commons.constants.ScheduleType;
|
|
||||||
import io.dataease.commons.constants.TaskStatus;
|
|
||||||
import io.dataease.commons.exception.DEException;
|
import io.dataease.commons.exception.DEException;
|
||||||
import io.dataease.commons.utils.*;
|
import io.dataease.commons.utils.*;
|
||||||
import io.dataease.controller.request.dataset.DataSetGroupRequest;
|
import io.dataease.controller.request.dataset.DataSetGroupRequest;
|
||||||
@ -23,7 +14,6 @@ import io.dataease.controller.request.dataset.DataSetTableRequest;
|
|||||||
import io.dataease.controller.request.dataset.DataSetTaskRequest;
|
import io.dataease.controller.request.dataset.DataSetTaskRequest;
|
||||||
import io.dataease.controller.request.datasource.DatasourceRequest;
|
import io.dataease.controller.request.datasource.DatasourceRequest;
|
||||||
import io.dataease.controller.response.DataSetDetail;
|
import io.dataease.controller.response.DataSetDetail;
|
||||||
import io.dataease.dto.chart.ChartCustomFilterItemDTO;
|
|
||||||
import io.dataease.dto.chart.ChartFieldCustomFilterDTO;
|
import io.dataease.dto.chart.ChartFieldCustomFilterDTO;
|
||||||
import io.dataease.dto.dataset.*;
|
import io.dataease.dto.dataset.*;
|
||||||
import io.dataease.dto.dataset.union.UnionDTO;
|
import io.dataease.dto.dataset.union.UnionDTO;
|
||||||
@ -32,12 +22,7 @@ import io.dataease.dto.dataset.union.UnionParamDTO;
|
|||||||
import io.dataease.dto.datasource.TableFiled;
|
import io.dataease.dto.datasource.TableFiled;
|
||||||
import io.dataease.exception.DataEaseException;
|
import io.dataease.exception.DataEaseException;
|
||||||
import io.dataease.i18n.Translator;
|
import io.dataease.i18n.Translator;
|
||||||
import io.dataease.plugins.config.SpringContextUtil;
|
|
||||||
import io.dataease.plugins.loader.ClassloaderResponsity;
|
import io.dataease.plugins.loader.ClassloaderResponsity;
|
||||||
import io.dataease.plugins.xpack.auth.dto.request.DataSetRowPermissionsDTO;
|
|
||||||
import io.dataease.plugins.xpack.auth.dto.request.DatasetRowPermissions;
|
|
||||||
import io.dataease.plugins.xpack.auth.dto.response.XpackSysAuthDetailDTO;
|
|
||||||
import io.dataease.plugins.xpack.auth.service.RowPermissionService;
|
|
||||||
import io.dataease.provider.ProviderFactory;
|
import io.dataease.provider.ProviderFactory;
|
||||||
import io.dataease.provider.datasource.DatasourceProvider;
|
import io.dataease.provider.datasource.DatasourceProvider;
|
||||||
import io.dataease.provider.datasource.JdbcProvider;
|
import io.dataease.provider.datasource.JdbcProvider;
|
||||||
@ -72,7 +57,7 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
;
|
;import static io.dataease.commons.constants.ColumnPermissionConstants.Desensitization_desc;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author gin
|
* @Author gin
|
||||||
@ -108,7 +93,7 @@ public class DataSetTableService {
|
|||||||
@Resource
|
@Resource
|
||||||
private DatasetTableFieldMapper datasetTableFieldMapper;
|
private DatasetTableFieldMapper datasetTableFieldMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private AuthUserService authUserService;
|
private PermissionService permissionService;
|
||||||
|
|
||||||
private static final String lastUpdateTime = "${__last_update_time__}";
|
private static final String lastUpdateTime = "${__last_update_time__}";
|
||||||
private static final String currentUpdateTime = "${__current_update_time__}";
|
private static final String currentUpdateTime = "${__current_update_time__}";
|
||||||
@ -448,103 +433,6 @@ public class DataSetTableService {
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<DatasetRowPermissions> rowPermissions(String datasetId, Long userId) {
|
|
||||||
List<DatasetRowPermissions> datasetRowPermissions = new ArrayList<>();
|
|
||||||
Map<String, RowPermissionService> beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((RowPermissionService.class));
|
|
||||||
if (beansOfType.keySet().size() == 0) {
|
|
||||||
return new ArrayList<>();
|
|
||||||
}
|
|
||||||
RowPermissionService rowPermissionService = SpringContextUtil.getBean(RowPermissionService.class);
|
|
||||||
CurrentUserDto user = AuthUtils.getUser();
|
|
||||||
List<Long> roleIds = new ArrayList<>();
|
|
||||||
Long deptId = null;
|
|
||||||
|
|
||||||
if (user == null && userId == null) {
|
|
||||||
return datasetRowPermissions;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (user != null && userId != null) {
|
|
||||||
return datasetRowPermissions;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (user != null) {
|
|
||||||
if (user.getIsAdmin()) {
|
|
||||||
return datasetRowPermissions;
|
|
||||||
}
|
|
||||||
userId = user.getUserId();
|
|
||||||
deptId = user.getDeptId();
|
|
||||||
roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (userId != null) {
|
|
||||||
SysUserEntity userEntity = authUserService.getUserById(userId);
|
|
||||||
if (userEntity.getIsAdmin()) {
|
|
||||||
return datasetRowPermissions;
|
|
||||||
}
|
|
||||||
deptId = userEntity.getDeptId();
|
|
||||||
roleIds = authUserService.roles(userId).stream().map(r -> Long.valueOf(r)).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
DataSetRowPermissionsDTO dataSetRowPermissionsDTO = new DataSetRowPermissionsDTO();
|
|
||||||
dataSetRowPermissionsDTO.setDatasetId(datasetId);
|
|
||||||
dataSetRowPermissionsDTO.setAuthTargetIds(Collections.singletonList(userId));
|
|
||||||
dataSetRowPermissionsDTO.setAuthTargetType("user");
|
|
||||||
datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO));
|
|
||||||
dataSetRowPermissionsDTO.setAuthTargetIds(roleIds);
|
|
||||||
dataSetRowPermissionsDTO.setAuthTargetType("role");
|
|
||||||
datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO));
|
|
||||||
dataSetRowPermissionsDTO.setAuthTargetIds(Collections.singletonList(deptId));
|
|
||||||
dataSetRowPermissionsDTO.setAuthTargetType("dept");
|
|
||||||
datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO));
|
|
||||||
return datasetRowPermissions;
|
|
||||||
}
|
|
||||||
|
|
||||||
private DatasetTableField getFieldById(List<DatasetTableField> fields, String fieldId) {
|
|
||||||
DatasetTableField field = null;
|
|
||||||
for (DatasetTableField datasetTableField : fields) {
|
|
||||||
if (fieldId.equalsIgnoreCase(datasetTableField.getId())) {
|
|
||||||
field = datasetTableField;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return field;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<ChartFieldCustomFilterDTO> getCustomFilters(List<DatasetTableField> fields, DatasetTable datasetTable, Long user) {
|
|
||||||
List<ChartFieldCustomFilterDTO> customFilter = new ArrayList<>();
|
|
||||||
for (DatasetRowPermissions datasetRowPermissions : rowPermissions(datasetTable.getId(), user)) {
|
|
||||||
ChartFieldCustomFilterDTO dto = new ChartFieldCustomFilterDTO();
|
|
||||||
if (StringUtils.isEmpty(datasetRowPermissions.getDatasetFieldId())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
DatasetTableField field = getFieldById(fields, datasetRowPermissions.getDatasetFieldId());
|
|
||||||
if (field == null) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
dto.setField(field);
|
|
||||||
dto.setId(field.getId());
|
|
||||||
dto.setFilterType(datasetRowPermissions.getFilterType());
|
|
||||||
if (datasetRowPermissions.getFilterType().equalsIgnoreCase("logic")) {
|
|
||||||
if (StringUtils.isEmpty(datasetRowPermissions.getFilter())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
List<ChartCustomFilterItemDTO> lists = JSONObject.parseArray(datasetRowPermissions.getFilter(), ChartCustomFilterItemDTO.class);
|
|
||||||
lists.forEach(chartCustomFilterDTO -> {
|
|
||||||
chartCustomFilterDTO.setFieldId(field.getId());
|
|
||||||
});
|
|
||||||
dto.setFilter(lists);
|
|
||||||
dto.setLogic(datasetRowPermissions.getLogic());
|
|
||||||
customFilter.add(dto);
|
|
||||||
} else {
|
|
||||||
if (StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
dto.setEnumCheckField(Arrays.asList(datasetRowPermissions.getEnumCheckField().split(",").clone()));
|
|
||||||
customFilter.add(dto);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return customFilter;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize, List<DatasetTableField> extFields) throws Exception {
|
public Map<String, Object> getPreviewData(DataSetTableRequest dataSetTableRequest, Integer page, Integer pageSize, List<DatasetTableField> extFields) throws Exception {
|
||||||
Map<String, Object> map = new HashMap<>();
|
Map<String, Object> map = new HashMap<>();
|
||||||
@ -560,7 +448,11 @@ public class DataSetTableService {
|
|||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
DatasetTable datasetTable = datasetTableMapper.selectByPrimaryKey(dataSetTableRequest.getId());
|
DatasetTable datasetTable = datasetTableMapper.selectByPrimaryKey(dataSetTableRequest.getId());
|
||||||
List<ChartFieldCustomFilterDTO> customFilter = getCustomFilters(fields, datasetTable, null);
|
//列权限
|
||||||
|
List<String> desensitizationList = new ArrayList<>();
|
||||||
|
fields = permissionService.filterColumnPermissons(fields, desensitizationList, datasetTable, null);
|
||||||
|
//行权限
|
||||||
|
List<ChartFieldCustomFilterDTO> customFilter = permissionService.getCustomFilters(fields, datasetTable, null);
|
||||||
String[] fieldArray = fields.stream().map(DatasetTableField::getDataeaseName).toArray(String[]::new);
|
String[] fieldArray = fields.stream().map(DatasetTableField::getDataeaseName).toArray(String[]::new);
|
||||||
|
|
||||||
DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class);
|
DataTableInfoDTO dataTableInfoDTO = new Gson().fromJson(dataSetTableRequest.getInfo(), DataTableInfoDTO.class);
|
||||||
@ -873,7 +765,11 @@ public class DataSetTableService {
|
|||||||
jsonArray = data.stream().map(ele -> {
|
jsonArray = data.stream().map(ele -> {
|
||||||
Map<String, Object> tmpMap = new HashMap<>();
|
Map<String, Object> tmpMap = new HashMap<>();
|
||||||
for (int i = 0; i < ele.length; i++) {
|
for (int i = 0; i < ele.length; i++) {
|
||||||
tmpMap.put(fieldArray[i], ele[i]);
|
if (desensitizationList.contains(fieldArray[i])) {
|
||||||
|
tmpMap.put(fieldArray[i], Desensitization_desc);
|
||||||
|
} else {
|
||||||
|
tmpMap.put(fieldArray[i], ele[i]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return tmpMap;
|
return tmpMap;
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
@ -0,0 +1,202 @@
|
|||||||
|
package io.dataease.service.dataset;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import io.dataease.auth.api.dto.CurrentRoleDto;
|
||||||
|
import io.dataease.auth.api.dto.CurrentUserDto;
|
||||||
|
import io.dataease.auth.entity.SysUserEntity;
|
||||||
|
import io.dataease.auth.service.AuthUserService;
|
||||||
|
import io.dataease.base.domain.DatasetTable;
|
||||||
|
import io.dataease.base.domain.DatasetTableField;
|
||||||
|
import io.dataease.commons.constants.ColumnPermissionConstants;
|
||||||
|
import io.dataease.commons.utils.AuthUtils;
|
||||||
|
import io.dataease.dto.chart.ChartCustomFilterItemDTO;
|
||||||
|
import io.dataease.dto.chart.ChartFieldCustomFilterDTO;
|
||||||
|
import io.dataease.plugins.config.SpringContextUtil;
|
||||||
|
import io.dataease.plugins.xpack.auth.dto.request.*;
|
||||||
|
import io.dataease.plugins.xpack.auth.service.ColumnPermissionService;
|
||||||
|
import io.dataease.plugins.xpack.auth.service.RowPermissionService;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class PermissionService {
|
||||||
|
@Resource
|
||||||
|
private AuthUserService authUserService;
|
||||||
|
|
||||||
|
public List<ChartFieldCustomFilterDTO> getCustomFilters(List<DatasetTableField> fields, DatasetTable datasetTable, Long user) {
|
||||||
|
List<ChartFieldCustomFilterDTO> customFilter = new ArrayList<>();
|
||||||
|
for (DatasetRowPermissions datasetRowPermissions : rowPermissions(datasetTable.getId(), user)) {
|
||||||
|
ChartFieldCustomFilterDTO dto = new ChartFieldCustomFilterDTO();
|
||||||
|
if (StringUtils.isEmpty(datasetRowPermissions.getDatasetFieldId())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
DatasetTableField field = getFieldById(fields, datasetRowPermissions.getDatasetFieldId());
|
||||||
|
if (field == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dto.setField(field);
|
||||||
|
dto.setId(field.getId());
|
||||||
|
dto.setFilterType(datasetRowPermissions.getFilterType());
|
||||||
|
if (datasetRowPermissions.getFilterType().equalsIgnoreCase("logic")) {
|
||||||
|
if (StringUtils.isEmpty(datasetRowPermissions.getFilter())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<ChartCustomFilterItemDTO> lists = JSONObject.parseArray(datasetRowPermissions.getFilter(), ChartCustomFilterItemDTO.class);
|
||||||
|
lists.forEach(chartCustomFilterDTO -> {
|
||||||
|
chartCustomFilterDTO.setFieldId(field.getId());
|
||||||
|
});
|
||||||
|
dto.setFilter(lists);
|
||||||
|
dto.setLogic(datasetRowPermissions.getLogic());
|
||||||
|
customFilter.add(dto);
|
||||||
|
} else {
|
||||||
|
if (StringUtils.isEmpty(datasetRowPermissions.getEnumCheckField())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dto.setEnumCheckField(Arrays.asList(datasetRowPermissions.getEnumCheckField().split(",").clone()));
|
||||||
|
customFilter.add(dto);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return customFilter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<DatasetTableField> filterColumnPermissons(List<DatasetTableField> fields, List<String>desensitizationList, DatasetTable datasetTable, Long user){
|
||||||
|
List<DatasetTableField> result = new ArrayList<>();
|
||||||
|
List<ColumnPermissionItem> allColumnPermissionItems = new ArrayList<>();
|
||||||
|
for (DataSetColumnPermissionsDTO dataSetColumnPermissionsDTO : columnPermissions(datasetTable.getId(), user)) {
|
||||||
|
ColumnPermissions columnPermissions = JSONObject.parseObject(dataSetColumnPermissionsDTO.getPermissions(), ColumnPermissions.class);
|
||||||
|
if(!columnPermissions.getEnable()){continue;}
|
||||||
|
allColumnPermissionItems.addAll(columnPermissions.getColumns().stream().filter(columnPermissionItem -> columnPermissionItem.getSelected()).collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
fields.forEach(field ->{
|
||||||
|
List<String> 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());
|
||||||
|
result.add(field);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private List<DatasetRowPermissions> rowPermissions(String datasetId, Long userId) {
|
||||||
|
List<DatasetRowPermissions> datasetRowPermissions = new ArrayList<>();
|
||||||
|
Map<String, RowPermissionService> beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((RowPermissionService.class));
|
||||||
|
if (beansOfType.keySet().size() == 0) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
RowPermissionService rowPermissionService = SpringContextUtil.getBean(RowPermissionService.class);
|
||||||
|
CurrentUserDto user = AuthUtils.getUser();
|
||||||
|
List<Long> roleIds = new ArrayList<>();
|
||||||
|
Long deptId = null;
|
||||||
|
|
||||||
|
if (user == null && userId == null) {
|
||||||
|
return datasetRowPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user != null && userId != null) {
|
||||||
|
return datasetRowPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user != null) {
|
||||||
|
if (user.getIsAdmin()) {
|
||||||
|
return datasetRowPermissions;
|
||||||
|
}
|
||||||
|
userId = user.getUserId();
|
||||||
|
deptId = user.getDeptId();
|
||||||
|
roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userId != null) {
|
||||||
|
SysUserEntity userEntity = authUserService.getUserById(userId);
|
||||||
|
if (userEntity.getIsAdmin()) {
|
||||||
|
return datasetRowPermissions;
|
||||||
|
}
|
||||||
|
deptId = userEntity.getDeptId();
|
||||||
|
roleIds = authUserService.roles(userId).stream().map(r -> Long.valueOf(r)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DataSetRowPermissionsDTO dataSetRowPermissionsDTO = new DataSetRowPermissionsDTO();
|
||||||
|
dataSetRowPermissionsDTO.setDatasetId(datasetId);
|
||||||
|
dataSetRowPermissionsDTO.setAuthTargetIds(Collections.singletonList(userId));
|
||||||
|
dataSetRowPermissionsDTO.setAuthTargetType("user");
|
||||||
|
datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO));
|
||||||
|
dataSetRowPermissionsDTO.setAuthTargetIds(roleIds);
|
||||||
|
dataSetRowPermissionsDTO.setAuthTargetType("role");
|
||||||
|
datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO));
|
||||||
|
dataSetRowPermissionsDTO.setAuthTargetIds(Collections.singletonList(deptId));
|
||||||
|
dataSetRowPermissionsDTO.setAuthTargetType("dept");
|
||||||
|
datasetRowPermissions.addAll(rowPermissionService.searchRowPermissions(dataSetRowPermissionsDTO));
|
||||||
|
return datasetRowPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<DataSetColumnPermissionsDTO> columnPermissions(String datasetId, Long userId) {
|
||||||
|
List<DataSetColumnPermissionsDTO> datasetColumnPermissions = new ArrayList<>();
|
||||||
|
Map<String, ColumnPermissionService> beansOfType = SpringContextUtil.getApplicationContext().getBeansOfType((ColumnPermissionService.class));
|
||||||
|
if (beansOfType.keySet().size() == 0) {
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
ColumnPermissionService columnPermissionService = SpringContextUtil.getBean(ColumnPermissionService.class);
|
||||||
|
CurrentUserDto user = AuthUtils.getUser();
|
||||||
|
List<Long> roleIds = new ArrayList<>();
|
||||||
|
Long deptId = null;
|
||||||
|
|
||||||
|
if (user == null && userId == null) {
|
||||||
|
return datasetColumnPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user != null && userId != null) {
|
||||||
|
return datasetColumnPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (user != null) {
|
||||||
|
if (user.getIsAdmin()) {
|
||||||
|
return datasetColumnPermissions;
|
||||||
|
}
|
||||||
|
userId = user.getUserId();
|
||||||
|
deptId = user.getDeptId();
|
||||||
|
roleIds = user.getRoles().stream().map(CurrentRoleDto::getId).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (userId != null) {
|
||||||
|
SysUserEntity userEntity = authUserService.getUserById(userId);
|
||||||
|
if (userEntity.getIsAdmin()) {
|
||||||
|
return datasetColumnPermissions;
|
||||||
|
}
|
||||||
|
deptId = userEntity.getDeptId();
|
||||||
|
roleIds = authUserService.roles(userId).stream().map(r -> Long.valueOf(r)).collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
DataSetColumnPermissionsDTO dataSetColumnPermissionsDTO = new DataSetColumnPermissionsDTO();
|
||||||
|
dataSetColumnPermissionsDTO.setDatasetId(datasetId);
|
||||||
|
dataSetColumnPermissionsDTO.setAuthTargetIds(Collections.singletonList(userId));
|
||||||
|
dataSetColumnPermissionsDTO.setAuthTargetType("user");
|
||||||
|
datasetColumnPermissions.addAll(columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO));
|
||||||
|
dataSetColumnPermissionsDTO.setAuthTargetIds(roleIds);
|
||||||
|
dataSetColumnPermissionsDTO.setAuthTargetType("role");
|
||||||
|
datasetColumnPermissions.addAll(columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO));
|
||||||
|
dataSetColumnPermissionsDTO.setAuthTargetIds(Collections.singletonList(deptId));
|
||||||
|
dataSetColumnPermissionsDTO.setAuthTargetType("dept");
|
||||||
|
datasetColumnPermissions.addAll(columnPermissionService.searchPermissions(dataSetColumnPermissionsDTO));
|
||||||
|
return datasetColumnPermissions;
|
||||||
|
}
|
||||||
|
|
||||||
|
private DatasetTableField getFieldById(List<DatasetTableField> fields, String fieldId) {
|
||||||
|
DatasetTableField field = null;
|
||||||
|
for (DatasetTableField datasetTableField : fields) {
|
||||||
|
if (fieldId.equalsIgnoreCase(datasetTableField.getId())) {
|
||||||
|
field = datasetTableField;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return field;
|
||||||
|
}
|
||||||
|
}
|
@ -4,20 +4,18 @@ import com.google.gson.Gson;
|
|||||||
import io.dataease.base.domain.DatasetTable;
|
import io.dataease.base.domain.DatasetTable;
|
||||||
import io.dataease.base.domain.DatasetTableField;
|
import io.dataease.base.domain.DatasetTableField;
|
||||||
import io.dataease.base.domain.Datasource;
|
import io.dataease.base.domain.Datasource;
|
||||||
|
import io.dataease.commons.constants.ColumnPermissionConstants;
|
||||||
import io.dataease.commons.utils.CommonBeanFactory;
|
import io.dataease.commons.utils.CommonBeanFactory;
|
||||||
import io.dataease.dto.chart.ChartFieldCustomFilterDTO;
|
import io.dataease.dto.chart.ChartFieldCustomFilterDTO;
|
||||||
import io.dataease.i18n.Translator;
|
import io.dataease.i18n.Translator;
|
||||||
import io.dataease.provider.datasource.DatasourceProvider;
|
import io.dataease.provider.datasource.DatasourceProvider;
|
||||||
import io.dataease.provider.ProviderFactory;
|
import io.dataease.provider.ProviderFactory;
|
||||||
import io.dataease.controller.request.datasource.DatasourceRequest;
|
import io.dataease.controller.request.datasource.DatasourceRequest;
|
||||||
|
import io.dataease.service.dataset.*;
|
||||||
import io.dataease.service.datasource.DatasourceService;
|
import io.dataease.service.datasource.DatasourceService;
|
||||||
import io.dataease.dto.dataset.DataSetTableUnionDTO;
|
import io.dataease.dto.dataset.DataSetTableUnionDTO;
|
||||||
import io.dataease.dto.dataset.DataTableInfoDTO;
|
import io.dataease.dto.dataset.DataTableInfoDTO;
|
||||||
import io.dataease.provider.query.QueryProvider;
|
import io.dataease.provider.query.QueryProvider;
|
||||||
import io.dataease.service.dataset.DataSetFieldService;
|
|
||||||
import io.dataease.service.dataset.DataSetTableFieldsService;
|
|
||||||
import io.dataease.service.dataset.DataSetTableService;
|
|
||||||
import io.dataease.service.dataset.DataSetTableUnionService;
|
|
||||||
import org.apache.commons.collections.CollectionUtils;
|
import org.apache.commons.collections.CollectionUtils;
|
||||||
import org.apache.commons.lang3.ObjectUtils;
|
import org.apache.commons.lang3.ObjectUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
@ -40,32 +38,38 @@ public class DirectFieldService implements DataSetFieldService {
|
|||||||
private DatasourceService datasourceService;
|
private DatasourceService datasourceService;
|
||||||
@Resource
|
@Resource
|
||||||
private DataSetTableUnionService dataSetTableUnionService;
|
private DataSetTableUnionService dataSetTableUnionService;
|
||||||
|
@Resource
|
||||||
|
private PermissionService permissionService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Object> fieldValues(String fieldId, Long userId) throws Exception{
|
public List<Object> fieldValues(String fieldId, Long userId) throws Exception {
|
||||||
List<DatasetTableField> list = dataSetTableFieldsService.getListByIds(new ArrayList<String>() {{
|
DatasetTableField field = dataSetTableFieldsService.selectByPrimaryKey(fieldId);
|
||||||
add(fieldId);
|
if (field == null || StringUtils.isEmpty(field.getTableId())) return null;
|
||||||
}});
|
|
||||||
if (CollectionUtils.isEmpty(list)) return null;
|
|
||||||
|
|
||||||
DatasetTableField field = list.get(0);
|
DatasetTable datasetTable = dataSetTableService.get(field.getTableId());
|
||||||
String tableId = field.getTableId();
|
|
||||||
if (StringUtils.isEmpty(tableId)) return null;
|
|
||||||
|
|
||||||
DatasetTable datasetTable = dataSetTableService.get(tableId);
|
|
||||||
if (ObjectUtils.isEmpty(datasetTable) || StringUtils.isEmpty(datasetTable.getName())) return null;
|
if (ObjectUtils.isEmpty(datasetTable) || StringUtils.isEmpty(datasetTable.getName())) return null;
|
||||||
String tableName;
|
|
||||||
|
|
||||||
DatasetTableField datasetTableField = DatasetTableField.builder().tableId(tableId).checked(Boolean.TRUE).build();
|
DatasetTableField datasetTableField = DatasetTableField.builder().tableId(field.getTableId()).checked(Boolean.TRUE).build();
|
||||||
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
|
List<DatasetTableField> fields = dataSetTableFieldsService.list(datasetTableField);
|
||||||
List<ChartFieldCustomFilterDTO> customFilter = dataSetTableService.getCustomFilters(fields, datasetTable, userId);
|
|
||||||
|
//列权限
|
||||||
|
List<String> desensitizationList = new ArrayList<>();
|
||||||
|
fields = permissionService.filterColumnPermissons(fields, desensitizationList, datasetTable, userId);
|
||||||
|
|
||||||
|
if (CollectionUtils.isNotEmpty(desensitizationList) && desensitizationList.contains(field.getDataeaseName())) {
|
||||||
|
List<Object> results = new ArrayList<>();
|
||||||
|
results.add(ColumnPermissionConstants.Desensitization_desc);
|
||||||
|
return results;
|
||||||
|
}
|
||||||
|
//行权限
|
||||||
|
List<ChartFieldCustomFilterDTO> customFilter = permissionService.getCustomFilters(fields, datasetTable, userId);
|
||||||
|
|
||||||
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
DatasourceRequest datasourceRequest = new DatasourceRequest();
|
||||||
DatasourceProvider datasourceProvider = null;
|
DatasourceProvider datasourceProvider = null;
|
||||||
if (datasetTable.getMode() == 0) {// 直连
|
if (datasetTable.getMode() == 0) {// 直连
|
||||||
if (StringUtils.isEmpty(datasetTable.getDataSourceId())) return null;
|
if (StringUtils.isEmpty(datasetTable.getDataSourceId())) return null;
|
||||||
Datasource ds = datasourceService.get(datasetTable.getDataSourceId());
|
Datasource ds = datasourceService.get(datasetTable.getDataSourceId());
|
||||||
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"));
|
throw new Exception(Translator.get("i18n_invalid_ds"));
|
||||||
}
|
}
|
||||||
datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||||
@ -94,7 +98,7 @@ public class DirectFieldService implements DataSetFieldService {
|
|||||||
datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
datasourceProvider = ProviderFactory.getProvider(ds.getType());
|
||||||
datasourceRequest = new DatasourceRequest();
|
datasourceRequest = new DatasourceRequest();
|
||||||
datasourceRequest.setDatasource(ds);
|
datasourceRequest.setDatasource(ds);
|
||||||
tableName = "ds_" + datasetTable.getId().replaceAll("-", "_");
|
String tableName = "ds_" + datasetTable.getId().replaceAll("-", "_");
|
||||||
datasourceRequest.setTable(tableName);
|
datasourceRequest.setTable(tableName);
|
||||||
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
|
QueryProvider qp = ProviderFactory.getQueryProvider(ds.getType());
|
||||||
datasourceRequest.setQuery(qp.createQuerySQL(tableName, Collections.singletonList(field), true, null, customFilter));
|
datasourceRequest.setQuery(qp.createQuerySQL(tableName, Collections.singletonList(field), true, null, customFilter));
|
||||||
|
9
backend/src/main/resources/db/migration/V31__1.7.sql
Normal file
9
backend/src/main/resources/db/migration/V31__1.7.sql
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
CREATE TABLE `dataset_column_permissions` (
|
||||||
|
`id` varchar(64) NOT NULL COMMENT 'File ID',
|
||||||
|
`auth_target_type` varchar(255) DEFAULT NULL COMMENT '权限类型:组织/角色/用户',
|
||||||
|
`auth_target_id` bigint(20) DEFAULT NULL COMMENT '权限对象ID',
|
||||||
|
`dataset_id` varchar(64) DEFAULT NULL COMMENT '数据集ID',
|
||||||
|
`permissions` longtext DEFAULT NULL COMMENT '权限',
|
||||||
|
`update_time` bigint(13) NULL DEFAULT NULL,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE utf8mb4_general_ci;
|
@ -60,6 +60,6 @@
|
|||||||
</javaClientGenerator>
|
</javaClientGenerator>
|
||||||
|
|
||||||
<!--要生成的数据库表 -->
|
<!--要生成的数据库表 -->
|
||||||
<table tableName="dataset_row_permissions"/>
|
<table tableName="dataset_column_permissions"/>
|
||||||
</context>
|
</context>
|
||||||
</generatorConfiguration>
|
</generatorConfiguration>
|
||||||
|
@ -1200,7 +1200,21 @@ export default {
|
|||||||
auth_type: 'Authorization type',
|
auth_type: 'Authorization type',
|
||||||
auth_obj: 'Authorized object'
|
auth_obj: 'Authorized object'
|
||||||
},
|
},
|
||||||
|
column_permission: {
|
||||||
|
add: 'Add',
|
||||||
|
edit: 'Edit',
|
||||||
|
please_select_auth_type: 'Please select the authorization type',
|
||||||
|
please_select_auth_id: '请选择授权目标',
|
||||||
|
column_permission_not_empty: 'Please select authorization target',
|
||||||
|
auth_type: 'Authorization type',
|
||||||
|
auth_obj: 'Authorized object',
|
||||||
|
enable: 'Enable column permissions',
|
||||||
|
prohibit: 'Prohibit',
|
||||||
|
desensitization: 'Desensitization'
|
||||||
|
},
|
||||||
row_permissions: 'Row Permissions',
|
row_permissions: 'Row Permissions',
|
||||||
|
column_permissions: '列权限',
|
||||||
|
row_column_permissions: '行列权限',
|
||||||
union_data: 'Union Dataset',
|
union_data: 'Union Dataset',
|
||||||
add_union_table: 'Add Union Dataset',
|
add_union_table: 'Add Union Dataset',
|
||||||
edit_union: 'Edit Union Dataset',
|
edit_union: 'Edit Union Dataset',
|
||||||
|
@ -1200,7 +1200,21 @@ export default {
|
|||||||
auth_type: '授權類型',
|
auth_type: '授權類型',
|
||||||
auth_obj: '授權對象'
|
auth_obj: '授權對象'
|
||||||
},
|
},
|
||||||
|
column_permission: {
|
||||||
|
add: '添加列權限',
|
||||||
|
edit: '編輯列權限',
|
||||||
|
please_select_auth_type: '請選餓授權類型',
|
||||||
|
please_select_auth_id: '請選擇授權目標',
|
||||||
|
column_permission_not_empty: '列權限不能為空',
|
||||||
|
auth_type: '授權類型',
|
||||||
|
auth_obj: '授權對象',
|
||||||
|
enable: '啟用列權限',
|
||||||
|
prohibit: '禁用',
|
||||||
|
desensitization: '脫敏'
|
||||||
|
},
|
||||||
row_permissions: '行權限',
|
row_permissions: '行權限',
|
||||||
|
column_permissions: '列權限',
|
||||||
|
row_column_permissions: '行列權限',
|
||||||
union_data: '關聯數據集',
|
union_data: '關聯數據集',
|
||||||
add_union_table: '添加關聯數據集',
|
add_union_table: '添加關聯數據集',
|
||||||
edit_union: '編輯關聯數據集',
|
edit_union: '編輯關聯數據集',
|
||||||
|
@ -1203,7 +1203,22 @@ export default {
|
|||||||
auth_type: '授权类型',
|
auth_type: '授权类型',
|
||||||
auth_obj: '授权对象'
|
auth_obj: '授权对象'
|
||||||
},
|
},
|
||||||
|
column_permission: {
|
||||||
|
add: '添加列权限',
|
||||||
|
edit: '编辑列权限',
|
||||||
|
please_select_field: '请选择字段',
|
||||||
|
please_select_auth_type: '请选择授权类型',
|
||||||
|
please_select_auth_id: '请选择授权目标',
|
||||||
|
column_permission_not_empty: '列权限不能为空',
|
||||||
|
auth_type: '授权类型',
|
||||||
|
auth_obj: '授权对象',
|
||||||
|
enable: '启用列权限',
|
||||||
|
prohibit: '禁用',
|
||||||
|
desensitization: '脱敏'
|
||||||
|
},
|
||||||
row_permissions: '行权限',
|
row_permissions: '行权限',
|
||||||
|
column_permissions: '列权限',
|
||||||
|
row_column_permissions: '行列权限',
|
||||||
union_data: '关联数据集',
|
union_data: '关联数据集',
|
||||||
add_union_table: '添加关联数据集',
|
add_union_table: '添加关联数据集',
|
||||||
edit_union: '编辑关联数据集',
|
edit_union: '编辑关联数据集',
|
||||||
|
@ -59,6 +59,9 @@
|
|||||||
<el-tab-pane v-if="isPluginLoaded && hasDataPermission('manage',param.privileges)" :lazy="true" :label="$t('dataset.row_permissions')" name="rowPermissions">
|
<el-tab-pane v-if="isPluginLoaded && hasDataPermission('manage',param.privileges)" :lazy="true" :label="$t('dataset.row_permissions')" name="rowPermissions">
|
||||||
<plugin-com v-if="isPluginLoaded && tabActive=='rowPermissions'" ref="RowPermissions" component-name="RowPermissions" :obj="table"/>
|
<plugin-com v-if="isPluginLoaded && tabActive=='rowPermissions'" ref="RowPermissions" component-name="RowPermissions" :obj="table"/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
|
<el-tab-pane v-if="isPluginLoaded && hasDataPermission('manage',param.privileges)" :lazy="true" :label="$t('dataset.column_permissions')" name="columnPermissions">
|
||||||
|
<plugin-com v-if="isPluginLoaded && tabActive=='columnPermissions'" ref="ColumnPermissions" component-name="ColumnPermissions" :obj="table" />
|
||||||
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-row>
|
</el-row>
|
||||||
</template>
|
</template>
|
||||||
|
Loading…
Reference in New Issue
Block a user