mirror of
https://github.com/dataease/dataease.git
synced 2026-05-22 13:30:19 +08:00
refactror(应用): 应用编辑权限控制优化
This commit is contained in:
@@ -85,11 +85,7 @@ public class DatasourceController {
|
||||
@ApiOperation("查询数据源详情")
|
||||
@PostMapping("/get/{id}")
|
||||
public DatasourceDTO getDatasource(@PathVariable String id) throws Exception {
|
||||
DatasourceUnionRequest request = new DatasourceUnionRequest();
|
||||
request.setUserId("1");
|
||||
request.setId(id);
|
||||
List<DatasourceDTO> datasourceList = datasourceService.getDatasourceList(request);
|
||||
return CollectionUtils.isNotEmpty(datasourceList) ? datasourceList.get(0) : null;
|
||||
return datasourceService.getDataSourceDetails(id);
|
||||
}
|
||||
|
||||
@ApiOperation("查询当前用户数据源")
|
||||
|
||||
@@ -15,7 +15,7 @@ public interface ExtDataSourceMapper {
|
||||
|
||||
List<DatasourceDTO> findByPanelId(@Param("panelId") String panelId);
|
||||
|
||||
|
||||
DatasourceDTO queryDetails(@Param("datasourceId") String datasourceId,@Param("userId") String userId);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -130,5 +130,12 @@
|
||||
WHERE panel_view.panel_id = #{panelId}
|
||||
</select>
|
||||
|
||||
<select id="queryDetails" resultMap="BaseResultMapDTO">
|
||||
select datasource.*,
|
||||
get_auths(id, 'link', #{userId}) as `privileges`
|
||||
from datasource
|
||||
where id = #{datasourceId}
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
||||
@@ -152,64 +152,75 @@ public class DatasourceService {
|
||||
request.setSort("update_time desc");
|
||||
List<DatasourceDTO> datasourceDTOS = extDataSourceMapper.queryUnion(request);
|
||||
datasourceDTOS.forEach(datasourceDTO -> {
|
||||
types().forEach(dataSourceType -> {
|
||||
if (dataSourceType.getType().equalsIgnoreCase(datasourceDTO.getType())) {
|
||||
datasourceDTO.setTypeDesc(dataSourceType.getName());
|
||||
datasourceDTO.setCalculationMode(dataSourceType.getCalculationMode());
|
||||
}
|
||||
});
|
||||
if (!datasourceDTO.getType().equalsIgnoreCase(DatasourceTypes.api.toString())) {
|
||||
JdbcConfiguration configuration = new Gson().fromJson(datasourceDTO.getConfiguration(), JdbcConfiguration.class);
|
||||
if (StringUtils.isNotEmpty(configuration.getCustomDriver()) && !configuration.getCustomDriver().equalsIgnoreCase("default")) {
|
||||
datasourceDTO.setCalculationMode(DatasourceCalculationMode.DIRECT);
|
||||
}
|
||||
JSONObject jsonObject = JSONObject.parseObject(datasourceDTO.getConfiguration());
|
||||
if (jsonObject.getString("queryTimeout") == null) {
|
||||
jsonObject.put("queryTimeout", 30);
|
||||
datasourceDTO.setConfiguration(jsonObject.toString());
|
||||
}
|
||||
}
|
||||
|
||||
if (datasourceDTO.getType().equalsIgnoreCase(DatasourceTypes.mysql.toString())) {
|
||||
MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasourceDTO.getConfiguration(), MysqlConfiguration.class);
|
||||
datasourceDTO.setConfiguration(new Gson().toJson(mysqlConfiguration));
|
||||
}
|
||||
if (datasourceDTO.getType().equalsIgnoreCase(DatasourceTypes.api.toString())) {
|
||||
List<ApiDefinition> apiDefinitionList = new Gson().fromJson(datasourceDTO.getConfiguration(), new TypeToken<ArrayList<ApiDefinition>>() {
|
||||
}.getType());
|
||||
List<ApiDefinition> apiDefinitionListWithStatus = new ArrayList<>();
|
||||
int success = 0;
|
||||
if (StringUtils.isNotEmpty(datasourceDTO.getStatus())) {
|
||||
JsonObject apiItemStatuses = JsonParser.parseString(datasourceDTO.getStatus()).getAsJsonObject();
|
||||
|
||||
for (int i = 0; i < apiDefinitionList.size(); i++) {
|
||||
String status = null;
|
||||
if (apiItemStatuses.get(apiDefinitionList.get(i).getName()) != null) {
|
||||
status = apiItemStatuses.get(apiDefinitionList.get(i).getName()).getAsString();
|
||||
}
|
||||
apiDefinitionList.get(i).setStatus(status);
|
||||
apiDefinitionList.get(i).setSerialNumber(i);
|
||||
apiDefinitionListWithStatus.add(apiDefinitionList.get(i));
|
||||
if (StringUtils.isNotEmpty(status) && status.equalsIgnoreCase("Success")) {
|
||||
success++;
|
||||
}
|
||||
}
|
||||
}
|
||||
datasourceDTO.setApiConfiguration(apiDefinitionListWithStatus);
|
||||
if (success == apiDefinitionList.size()) {
|
||||
datasourceDTO.setStatus("Success");
|
||||
} else {
|
||||
if (success > 0 && success < apiDefinitionList.size()) {
|
||||
datasourceDTO.setStatus("Warning");
|
||||
} else {
|
||||
datasourceDTO.setStatus("Error");
|
||||
}
|
||||
}
|
||||
}
|
||||
datasourceTrans(datasourceDTO);
|
||||
});
|
||||
return datasourceDTOS;
|
||||
}
|
||||
|
||||
private void datasourceTrans(DatasourceDTO datasourceDTO){
|
||||
types().forEach(dataSourceType -> {
|
||||
if (dataSourceType.getType().equalsIgnoreCase(datasourceDTO.getType())) {
|
||||
datasourceDTO.setTypeDesc(dataSourceType.getName());
|
||||
datasourceDTO.setCalculationMode(dataSourceType.getCalculationMode());
|
||||
}
|
||||
});
|
||||
if (!datasourceDTO.getType().equalsIgnoreCase(DatasourceTypes.api.toString())) {
|
||||
JdbcConfiguration configuration = new Gson().fromJson(datasourceDTO.getConfiguration(), JdbcConfiguration.class);
|
||||
if (StringUtils.isNotEmpty(configuration.getCustomDriver()) && !configuration.getCustomDriver().equalsIgnoreCase("default")) {
|
||||
datasourceDTO.setCalculationMode(DatasourceCalculationMode.DIRECT);
|
||||
}
|
||||
JSONObject jsonObject = JSONObject.parseObject(datasourceDTO.getConfiguration());
|
||||
if (jsonObject.getString("queryTimeout") == null) {
|
||||
jsonObject.put("queryTimeout", 30);
|
||||
datasourceDTO.setConfiguration(jsonObject.toString());
|
||||
}
|
||||
}
|
||||
|
||||
if (datasourceDTO.getType().equalsIgnoreCase(DatasourceTypes.mysql.toString())) {
|
||||
MysqlConfiguration mysqlConfiguration = new Gson().fromJson(datasourceDTO.getConfiguration(), MysqlConfiguration.class);
|
||||
datasourceDTO.setConfiguration(new Gson().toJson(mysqlConfiguration));
|
||||
}
|
||||
if (datasourceDTO.getType().equalsIgnoreCase(DatasourceTypes.api.toString())) {
|
||||
List<ApiDefinition> apiDefinitionList = new Gson().fromJson(datasourceDTO.getConfiguration(), new TypeToken<ArrayList<ApiDefinition>>() {
|
||||
}.getType());
|
||||
List<ApiDefinition> apiDefinitionListWithStatus = new ArrayList<>();
|
||||
int success = 0;
|
||||
if (StringUtils.isNotEmpty(datasourceDTO.getStatus())) {
|
||||
JsonObject apiItemStatuses = JsonParser.parseString(datasourceDTO.getStatus()).getAsJsonObject();
|
||||
|
||||
for (int i = 0; i < apiDefinitionList.size(); i++) {
|
||||
String status = null;
|
||||
if (apiItemStatuses.get(apiDefinitionList.get(i).getName()) != null) {
|
||||
status = apiItemStatuses.get(apiDefinitionList.get(i).getName()).getAsString();
|
||||
}
|
||||
apiDefinitionList.get(i).setStatus(status);
|
||||
apiDefinitionList.get(i).setSerialNumber(i);
|
||||
apiDefinitionListWithStatus.add(apiDefinitionList.get(i));
|
||||
if (StringUtils.isNotEmpty(status) && status.equalsIgnoreCase("Success")) {
|
||||
success++;
|
||||
}
|
||||
}
|
||||
}
|
||||
datasourceDTO.setApiConfiguration(apiDefinitionListWithStatus);
|
||||
if (success == apiDefinitionList.size()) {
|
||||
datasourceDTO.setStatus("Success");
|
||||
} else {
|
||||
if (success > 0 && success < apiDefinitionList.size()) {
|
||||
datasourceDTO.setStatus("Warning");
|
||||
} else {
|
||||
datasourceDTO.setStatus("Error");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public DatasourceDTO getDataSourceDetails(String datasourceId){
|
||||
DatasourceDTO result = extDataSourceMapper.queryDetails(datasourceId,String.valueOf(AuthUtils.getUser().getUserId()));
|
||||
if(result != null){
|
||||
this.datasourceTrans(result);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
public List<DatasourceDTO> gridQuery(BaseGridRequest request) {
|
||||
//如果没有查询条件增加一个默认的条件
|
||||
if (CollectionUtils.isEmpty(request.getConditions())) {
|
||||
|
||||
@@ -814,8 +814,8 @@ public class PanelGroupService {
|
||||
// dataset check
|
||||
if (CollectionUtils.isEmpty(datasetTablesInfo)) {
|
||||
return new PanelExport2App("this panel don't have dataset");
|
||||
} else if (datasetTablesInfo.stream().filter(datasetTable -> datasetTable.getType().equals("excel")).collect(Collectors.toList()).size() > 0) {
|
||||
return new PanelExport2App("this panel have dataset witch type is excel");
|
||||
} else if (datasetTablesInfo.stream().filter(datasetTable -> datasetTable.getType().equals("excel") || datasetTable.getType().equals("api")).collect(Collectors.toList()).size() > 0) {
|
||||
return new PanelExport2App("this panel have dataset witch type is excel or api");
|
||||
}
|
||||
|
||||
//datasource check
|
||||
|
||||
Reference in New Issue
Block a user