mirror of
https://gitee.com/fit2cloud-feizhiyun/MeterSphere.git
synced 2024-12-05 05:29:29 +08:00
refactor(项目设置): 更改文件管理的预览接口
This commit is contained in:
parent
d4c9ebedae
commit
7ec287bd87
@ -20,6 +20,7 @@ public class FilterChainUtils {
|
||||
filterChainDefinitionMap.put("/assets/**", "anon");
|
||||
filterChainDefinitionMap.put("/fonts/**", "anon");
|
||||
filterChainDefinitionMap.put("/display/info", "anon");
|
||||
filterChainDefinitionMap.put("/file/preview/**", "anon");
|
||||
filterChainDefinitionMap.put("/favicon.ico", "anon");
|
||||
filterChainDefinitionMap.put("/base-display/**", "anon");
|
||||
filterChainDefinitionMap.put("/jmeter/ping", "anon");
|
||||
|
@ -6,8 +6,8 @@ import io.metersphere.project.service.FileManagementService;
|
||||
import io.metersphere.project.service.FileMetadataService;
|
||||
import io.metersphere.sdk.constants.PermissionConstants;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.system.utils.Pager;
|
||||
import io.metersphere.sdk.util.Translator;
|
||||
import io.metersphere.system.utils.Pager;
|
||||
import io.metersphere.system.utils.SessionUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -45,6 +45,13 @@ public class FileManagementController {
|
||||
return fileMetadataService.page(request);
|
||||
}
|
||||
|
||||
@GetMapping("/get/{id}")
|
||||
@Operation(summary = "项目管理-文件管理-查看文件详情")
|
||||
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ)
|
||||
public FileInformationDTO page(@PathVariable String id) {
|
||||
return fileMetadataService.get(id);
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/module/count")
|
||||
@Operation(summary = "项目管理-文件管理-表格分页查询文件")
|
||||
@ -83,13 +90,6 @@ public class FileManagementController {
|
||||
return fileMetadataService.downloadById(id);
|
||||
}
|
||||
|
||||
@GetMapping(value = "/download/preview-img/{id}")
|
||||
@Operation(summary = "项目管理-文件管理-下载图片预览文件")
|
||||
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_DOWNLOAD)
|
||||
public ResponseEntity<byte[]> downloadPreview(@PathVariable String id) {
|
||||
return fileMetadataService.downloadPreviewImgById(id);
|
||||
}
|
||||
|
||||
@PostMapping(value = "/delete")
|
||||
@Operation(summary = "项目管理-文件管理-删除文件")
|
||||
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_DELETE)
|
||||
|
@ -2,13 +2,10 @@ package io.metersphere.project.controller;
|
||||
|
||||
import io.metersphere.project.request.filemanagement.FileModuleCreateRequest;
|
||||
import io.metersphere.project.request.filemanagement.FileModuleUpdateRequest;
|
||||
import io.metersphere.project.service.FileModuleLogService;
|
||||
import io.metersphere.project.service.FileModuleService;
|
||||
import io.metersphere.sdk.constants.PermissionConstants;
|
||||
import io.metersphere.system.dto.sdk.BaseTreeNode;
|
||||
import io.metersphere.system.dto.sdk.request.NodeMoveRequest;
|
||||
import io.metersphere.system.log.annotation.Log;
|
||||
import io.metersphere.system.log.constants.OperationLogType;
|
||||
import io.metersphere.system.utils.SessionUtils;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
@ -52,7 +49,6 @@ public class FileModuleController {
|
||||
@GetMapping("/delete/{deleteId}")
|
||||
@Operation(summary = "项目管理-文件管理-模块-删除模块")
|
||||
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_DELETE)
|
||||
@Log(type = OperationLogType.DELETE, expression = "#msClass.deleteLog(#deleteId)", msClass = FileModuleLogService.class)
|
||||
public void deleteNode(@PathVariable String deleteId) {
|
||||
fileModuleService.deleteModule(deleteId, SessionUtils.getUserId());
|
||||
}
|
||||
|
@ -0,0 +1,61 @@
|
||||
package io.metersphere.project.controller;
|
||||
|
||||
import io.metersphere.project.dto.filemanagement.FileInformationDTO;
|
||||
import io.metersphere.project.service.FileMetadataService;
|
||||
import io.metersphere.project.service.PermissionCheckService;
|
||||
import io.metersphere.sdk.constants.PermissionConstants;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.shiro.authz.annotation.RequiresPermissions;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Tag(name = "项目管理-文件预览")
|
||||
@RestController
|
||||
@RequestMapping("/file/preview")
|
||||
public class FilePreviewController {
|
||||
|
||||
@Resource
|
||||
private FileMetadataService fileMetadataService;
|
||||
@Resource
|
||||
private PermissionCheckService permissionCheckService;
|
||||
|
||||
|
||||
@GetMapping(value = "/original/{userId}/{fileId}")
|
||||
@Operation(summary = "预览原图")
|
||||
@RequiresPermissions(PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_DOWNLOAD)
|
||||
public ResponseEntity<byte[]> originalImg(@PathVariable String userId,@PathVariable String fileId) {
|
||||
FileInformationDTO fileInformationDTO = fileMetadataService.get(fileId);
|
||||
if (StringUtils.isEmpty(fileInformationDTO.getId())) {
|
||||
throw new MSException("file.not.exist");
|
||||
}
|
||||
//检查权限
|
||||
if(permissionCheckService.userHasProjectPermission(userId,fileInformationDTO.getProjectId(),PermissionConstants.PROJECT_FILE_MANAGEMENT_READ_DOWNLOAD)){
|
||||
return fileMetadataService.downloadById(fileId);
|
||||
}else {
|
||||
throw new MSException("http_result_forbidden");
|
||||
}
|
||||
|
||||
}
|
||||
@GetMapping(value = "/compressed/{userId}/{fileId}")
|
||||
@Operation(summary = "预览缩略图")
|
||||
public ResponseEntity<byte[]> compressedImg(@PathVariable String userId,@PathVariable String fileId) {
|
||||
FileInformationDTO fileInformationDTO = fileMetadataService.get(fileId);
|
||||
if (StringUtils.isEmpty(fileInformationDTO.getId())) {
|
||||
throw new MSException("file.not.exist");
|
||||
}
|
||||
//检查权限
|
||||
if(permissionCheckService.userHasProjectPermission(userId,fileInformationDTO.getProjectId(),PermissionConstants.PROJECT_FILE_MANAGEMENT_READ)){
|
||||
return fileMetadataService.downloadPreviewImgById(fileId);
|
||||
}else {
|
||||
throw new MSException("http_result_forbidden");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -7,6 +7,7 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ -21,12 +22,27 @@ public class FileInformationDTO {
|
||||
@Schema(description = "文件类型")
|
||||
private String fileType;
|
||||
|
||||
@Schema(description = "项目ID")
|
||||
private String projectId;
|
||||
|
||||
@Schema(description = "标签")
|
||||
private List<String> tags;
|
||||
private List<String> tags = new ArrayList<>();
|
||||
|
||||
@Schema(description = "描述")
|
||||
private String description;
|
||||
|
||||
@Schema(description = "模块名称")
|
||||
private String moduleName;
|
||||
|
||||
@Schema(description = "模块ID")
|
||||
private String moduleId;
|
||||
|
||||
@Schema(description = "更新人")
|
||||
private String createUser;
|
||||
|
||||
@Schema(description = "更新时间")
|
||||
private long createTime;
|
||||
|
||||
@Schema(description = "更新人")
|
||||
private String updateUser;
|
||||
|
||||
@ -36,16 +52,25 @@ public class FileInformationDTO {
|
||||
@Schema(description = "文件大小")
|
||||
private long size;
|
||||
|
||||
@Schema(description = "启用/禁用(jar文件)")
|
||||
private boolean enable;
|
||||
|
||||
public FileInformationDTO(FileMetadata fileMetadata) {
|
||||
this.id = fileMetadata.getId();
|
||||
this.name = fileMetadata.getName();
|
||||
this.fileType = fileMetadata.getType();
|
||||
this.size = fileMetadata.getSize();
|
||||
if (StringUtils.isNotBlank(fileMetadata.getTags())) {
|
||||
tags = JSON.parseArray(fileMetadata.getTags(), String.class);
|
||||
if (fileMetadata != null) {
|
||||
this.id = fileMetadata.getId();
|
||||
this.projectId = fileMetadata.getProjectId();
|
||||
this.name = fileMetadata.getName();
|
||||
this.fileType = fileMetadata.getType();
|
||||
this.description = fileMetadata.getDescription();
|
||||
this.moduleId = fileMetadata.getModuleId();
|
||||
this.size = fileMetadata.getSize();
|
||||
if (StringUtils.isNotBlank(fileMetadata.getTags())) {
|
||||
tags = JSON.parseArray(fileMetadata.getTags(), String.class);
|
||||
}
|
||||
this.createTime = fileMetadata.getCreateTime();
|
||||
this.createUser = fileMetadata.getCreateUser();
|
||||
this.updateUser = fileMetadata.getUpdateUser();
|
||||
this.updateTime = fileMetadata.getUpdateTime();
|
||||
}
|
||||
this.description = fileMetadata.getDescription();
|
||||
this.updateUser = fileMetadata.getUpdateUser();
|
||||
this.updateTime = fileMetadata.getUpdateTime();
|
||||
}
|
||||
}
|
||||
|
@ -16,6 +16,8 @@ public interface ExtFileMetadataMapper {
|
||||
|
||||
long countMyFile(FileManagementPageDTO fileManagementPageDTO);
|
||||
|
||||
FileMetadata getById(String id);
|
||||
|
||||
List<String> selectIdByRefIdList(@Param("refIdList") List<String> refIdList);
|
||||
|
||||
List<FileMetadata> selectDeleteFileInfoByIds(@Param("ids") List<String> ids);
|
||||
|
@ -6,18 +6,22 @@
|
||||
resultType="io.metersphere.project.domain.FileMetadata">
|
||||
SELECT
|
||||
f.id,
|
||||
updateUser.name as updateUser,
|
||||
createUser.name AS createUser,
|
||||
f.module_id,
|
||||
f.name,
|
||||
f.type,
|
||||
f.tags,
|
||||
f.description,
|
||||
u.name as update_user,
|
||||
f.create_time,
|
||||
f.update_time,
|
||||
f.path,
|
||||
f.project_id,
|
||||
f.size,
|
||||
f.storage
|
||||
FROM file_metadata f
|
||||
INNER JOIN user u ON f.update_user = u.id
|
||||
INNER JOIN user updateUser ON f.update_user = updateUser.id
|
||||
INNER JOIN user createUser ON f.create_user = createUser.id
|
||||
<include refid="file_page_request"/>
|
||||
</select>
|
||||
|
||||
@ -28,7 +32,8 @@
|
||||
f.id,
|
||||
f.ref_id
|
||||
FROM file_metadata f
|
||||
INNER JOIN user u ON f.update_user = u.id
|
||||
INNER JOIN user updateUser ON f.update_user = updateUser.id
|
||||
INNER JOIN user createUser ON f.create_user = createUser.id
|
||||
<include refid="file_page_request"/>
|
||||
</select>
|
||||
|
||||
@ -37,7 +42,8 @@
|
||||
resultType="io.metersphere.project.dto.ModuleCountDTO">
|
||||
SELECT f.module_id AS moduleId, count(f.id) AS dataCount
|
||||
FROM file_metadata f
|
||||
INNER JOIN user u ON f.update_user = u.id
|
||||
INNER JOIN user updateUser ON f.update_user = updateUser.id
|
||||
INNER JOIN user createUser ON f.create_user = createUser.id
|
||||
<include refid="file_page_request"/>
|
||||
GROUP BY f.module_id
|
||||
</select>
|
||||
@ -47,7 +53,8 @@
|
||||
resultType="java.lang.Long">
|
||||
SELECT count(f.id)
|
||||
FROM file_metadata f
|
||||
INNER JOIN user u ON f.update_user = u.id
|
||||
INNER JOIN user updateUser ON f.update_user = updateUser.id
|
||||
INNER JOIN user createUser ON f.create_user = createUser.id
|
||||
<include refid="file_page_request"/>
|
||||
</select>
|
||||
<sql id="file_page_request">
|
||||
@ -122,6 +129,27 @@
|
||||
FROM file_metadata f
|
||||
WHERE f.project_id = #{projectId}
|
||||
</select>
|
||||
<select id="getById" resultType="io.metersphere.project.domain.FileMetadata">
|
||||
SELECT f.id,
|
||||
f.module_id,
|
||||
f.create_time,
|
||||
f.update_time,
|
||||
updateUser.name as updateUser,
|
||||
createUser.name AS createUser,
|
||||
f.name,
|
||||
f.type,
|
||||
f.tags,
|
||||
f.description,
|
||||
f.update_time,
|
||||
f.path,
|
||||
f.project_id,
|
||||
f.size,
|
||||
f.storage
|
||||
FROM file_metadata f
|
||||
INNER JOIN user updateUser ON f.update_user = updateUser.id
|
||||
INNER JOIN user createUser ON f.create_user = createUser.id
|
||||
WHERE f.id = #{id}
|
||||
</select>
|
||||
|
||||
|
||||
</mapper>
|
@ -26,4 +26,6 @@ public interface ExtFileModuleMapper {
|
||||
FileModule getNextModuleInParentId(@Param("parentId") String parentId, @Param("pos") int pos);
|
||||
|
||||
FileModule getPreviousModuleInParentId(@Param("parentId") String parentId, @Param("pos") int pos);
|
||||
|
||||
String selectNameById(String moduleId);
|
||||
}
|
||||
|
@ -61,5 +61,10 @@
|
||||
desc
|
||||
limit 1
|
||||
</select>
|
||||
<select id="selectNameById" resultType="java.lang.String">
|
||||
SELECT name
|
||||
FROM file_module
|
||||
WHERE id = #{0}
|
||||
</select>
|
||||
|
||||
</mapper>
|
@ -14,8 +14,11 @@ import io.metersphere.project.utils.FileDownloadUtils;
|
||||
import io.metersphere.sdk.constants.ModuleConstants;
|
||||
import io.metersphere.sdk.constants.StorageType;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.sdk.util.JSON;
|
||||
import io.metersphere.sdk.util.LogUtils;
|
||||
import io.metersphere.sdk.util.TempFileUtils;
|
||||
import io.metersphere.sdk.util.Translator;
|
||||
import io.metersphere.system.file.FileRequest;
|
||||
import io.metersphere.sdk.util.*;
|
||||
import io.metersphere.system.uid.IDGenerator;
|
||||
import io.metersphere.system.utils.PageUtils;
|
||||
import io.metersphere.system.utils.Pager;
|
||||
@ -36,6 +39,7 @@ import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.atomic.AtomicLong;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ -56,6 +60,13 @@ public class FileMetadataService {
|
||||
@Value("${metersphere.file.batch-download-max:600MB}")
|
||||
private DataSize maxFileSize;
|
||||
|
||||
public FileInformationDTO get(String id) {
|
||||
FileMetadata fileMetadata = extFileMetadataMapper.getById(id);
|
||||
FileInformationDTO dto = new FileInformationDTO(fileMetadata);
|
||||
initModuleName(dto);
|
||||
return dto;
|
||||
}
|
||||
|
||||
public List<FileInformationDTO> list(FileMetadataTableRequest request) {
|
||||
List<FileInformationDTO> returnList = new ArrayList<>();
|
||||
FileManagementPageDTO pageDTO = new FileManagementPageDTO(request);
|
||||
@ -64,9 +75,30 @@ public class FileMetadataService {
|
||||
FileInformationDTO fileInformationDTO = new FileInformationDTO(fileMetadata);
|
||||
returnList.add(fileInformationDTO);
|
||||
});
|
||||
this.initModuleName(returnList);
|
||||
return returnList;
|
||||
}
|
||||
|
||||
private void initModuleName(List<FileInformationDTO> returnList) {
|
||||
List<String> moduleIds = returnList.stream().map(FileInformationDTO::getModuleId).distinct().collect(Collectors.toList());
|
||||
Map<String, String> moduleNameMap = fileModuleService.getModuleNameMapByIds(moduleIds);
|
||||
for (FileInformationDTO dto : returnList) {
|
||||
if (StringUtils.equals(dto.getModuleId(), ModuleConstants.DEFAULT_NODE_ID)) {
|
||||
dto.setModuleName(Translator.get("default.module"));
|
||||
} else {
|
||||
dto.setModuleName(moduleNameMap.get(dto.getModuleId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void initModuleName(FileInformationDTO dto) {
|
||||
if (StringUtils.equals(dto.getModuleId(), ModuleConstants.DEFAULT_NODE_ID)) {
|
||||
dto.setModuleName(Translator.get("default.module"));
|
||||
} else {
|
||||
dto.setModuleName(fileModuleService.getModuleName(dto.getModuleId()));
|
||||
}
|
||||
}
|
||||
|
||||
public String upload(FileUploadRequest request, String operator, MultipartFile uploadFile) throws Exception {
|
||||
//检查模块的合法性
|
||||
fileManagementService.checkModule(request.getModuleId(), ModuleConstants.NODE_TYPE_DEFAULT);
|
||||
|
@ -9,11 +9,11 @@ import io.metersphere.project.mapper.FileModuleMapper;
|
||||
import io.metersphere.project.request.filemanagement.FileModuleCreateRequest;
|
||||
import io.metersphere.project.request.filemanagement.FileModuleUpdateRequest;
|
||||
import io.metersphere.sdk.constants.ModuleConstants;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.sdk.util.Translator;
|
||||
import io.metersphere.system.dto.sdk.BaseModule;
|
||||
import io.metersphere.system.dto.sdk.BaseTreeNode;
|
||||
import io.metersphere.system.dto.sdk.request.NodeMoveRequest;
|
||||
import io.metersphere.sdk.exception.MSException;
|
||||
import io.metersphere.sdk.util.Translator;
|
||||
import io.metersphere.system.service.CleanupProjectResourceService;
|
||||
import io.metersphere.system.uid.IDGenerator;
|
||||
import jakarta.annotation.Resource;
|
||||
@ -27,6 +27,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@ -285,4 +286,19 @@ public class FileModuleService extends ModuleTreeService implements CleanupProje
|
||||
public void cleanReportResources(String projectId) {
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
public Map<String, String> getModuleNameMapByIds(List<String> moduleIds) {
|
||||
if (CollectionUtils.isEmpty(moduleIds)) {
|
||||
return new HashMap<>();
|
||||
} else {
|
||||
FileModuleExample example = new FileModuleExample();
|
||||
example.createCriteria().andIdIn(moduleIds);
|
||||
List<FileModule> moduleList = fileModuleMapper.selectByExample(example);
|
||||
return moduleList.stream().collect(Collectors.toMap(FileModule::getId, FileModule::getName));
|
||||
}
|
||||
}
|
||||
|
||||
public String getModuleName(String moduleId) {
|
||||
return extFileModuleMapper.selectNameById(moduleId);
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,58 @@
|
||||
package io.metersphere.project.service;
|
||||
|
||||
|
||||
import io.metersphere.sdk.constants.InternalUserRole;
|
||||
import io.metersphere.sdk.constants.UserRoleType;
|
||||
import io.metersphere.system.domain.UserRole;
|
||||
import io.metersphere.system.domain.UserRolePermission;
|
||||
import io.metersphere.system.dto.user.UserDTO;
|
||||
import io.metersphere.system.service.UserLoginService;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public class PermissionCheckService {
|
||||
@Resource
|
||||
private UserLoginService userLoginService;
|
||||
|
||||
public boolean userHasProjectPermission(String userId, String projectId, String permission) {
|
||||
Map<String, List<UserRolePermission>> userRolePermissions = new HashMap<>();
|
||||
Map<String, UserRole> role = new HashMap<>();
|
||||
UserDTO user = userLoginService.getUserDTO(userId);
|
||||
if (user != null) {
|
||||
user.getUserRoleRelations().forEach(ug -> user.getUserRolePermissions().forEach(gp -> {
|
||||
if (StringUtils.equalsIgnoreCase(gp.getUserRole().getId(), ug.getRoleId())) {
|
||||
userRolePermissions.put(ug.getId(), gp.getUserRolePermissions());
|
||||
role.put(ug.getId(), gp.getUserRole());
|
||||
}
|
||||
}));
|
||||
// 判断是否是超级管理员
|
||||
long count = user.getUserRoles()
|
||||
.stream()
|
||||
.filter(g -> StringUtils.equalsIgnoreCase(g.getId(), InternalUserRole.ADMIN.getValue()))
|
||||
.count();
|
||||
if (count > 0) {
|
||||
return true;
|
||||
}
|
||||
Set<String> currentProjectPermissions = user.getUserRoleRelations().stream()
|
||||
.filter(ug -> role.get(ug.getId()) != null && StringUtils.equalsIgnoreCase(role.get(ug.getId()).getType(), UserRoleType.PROJECT.name()))
|
||||
.filter(ug -> StringUtils.equalsIgnoreCase(ug.getSourceId(), projectId))
|
||||
.flatMap(ug -> userRolePermissions.get(ug.getId()).stream())
|
||||
.map(UserRolePermission::getPermissionId)
|
||||
.collect(Collectors.toSet());
|
||||
return currentProjectPermissions.contains(permission);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -12,15 +12,15 @@ import io.metersphere.project.utils.FileManagementRequestUtils;
|
||||
import io.metersphere.sdk.constants.ModuleConstants;
|
||||
import io.metersphere.sdk.constants.SessionConstants;
|
||||
import io.metersphere.sdk.constants.StorageType;
|
||||
import io.metersphere.system.dto.sdk.BaseTreeNode;
|
||||
import io.metersphere.system.dto.sdk.request.NodeMoveRequest;
|
||||
import io.metersphere.sdk.util.JSON;
|
||||
import io.metersphere.system.utils.Pager;
|
||||
import io.metersphere.sdk.util.TempFileUtils;
|
||||
import io.metersphere.system.base.BaseTest;
|
||||
import io.metersphere.system.controller.handler.ResultHolder;
|
||||
import io.metersphere.system.dto.sdk.BaseTreeNode;
|
||||
import io.metersphere.system.dto.sdk.request.NodeMoveRequest;
|
||||
import io.metersphere.system.log.constants.OperationLogType;
|
||||
import io.metersphere.system.uid.IDGenerator;
|
||||
import io.metersphere.system.utils.Pager;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
@ -57,6 +57,9 @@ public class FileManagementControllerTests extends BaseTest {
|
||||
|
||||
private static String reUploadFileId;
|
||||
|
||||
private static String picFileId;
|
||||
private static String txtFileId;
|
||||
|
||||
@Resource
|
||||
private FileModuleService fileModuleService;
|
||||
@Resource
|
||||
@ -388,6 +391,7 @@ public class FileManagementControllerTests extends BaseTest {
|
||||
String returnId = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData().toString();
|
||||
checkLog(returnId, OperationLogType.ADD, FileManagementRequestUtils.URL_FILE_UPLOAD);
|
||||
FILE_ID_PATH.put(returnId, filePath);
|
||||
picFileId = returnId;
|
||||
uploadedFileTypes.add("JPG");
|
||||
|
||||
//检查文件类型获取接口有没有获取到数据
|
||||
@ -411,6 +415,7 @@ public class FileManagementControllerTests extends BaseTest {
|
||||
returnId = JSON.parseObject(mvcResult.getResponse().getContentAsString(StandardCharsets.UTF_8), ResultHolder.class).getData().toString();
|
||||
checkLog(returnId, OperationLogType.ADD, FileManagementRequestUtils.URL_FILE_UPLOAD);
|
||||
FILE_ID_PATH.put(returnId, filePath);
|
||||
txtFileId = returnId;
|
||||
uploadedFileTypes.add("txt");
|
||||
|
||||
//检查文件类型获取接口有没有获取到数据
|
||||
@ -700,6 +705,7 @@ public class FileManagementControllerTests extends BaseTest {
|
||||
MvcResult mvcResult = this.batchDownloadFile(FileManagementRequestUtils.URL_FILE_BATCH_DOWNLOAD, batchProcessDTO);
|
||||
byte[] fileBytes = mvcResult.getResponse().getContentAsByteArray();
|
||||
Assertions.assertTrue(fileBytes.length > 0);
|
||||
|
||||
//全部文件大小超过默认配置(600M)的限制 事先存储20个大小为50M的数据,过后删除
|
||||
for (int i = 0; i < 20; i++) {
|
||||
String id = "test_" + i;
|
||||
@ -764,8 +770,27 @@ public class FileManagementControllerTests extends BaseTest {
|
||||
Pager.class);
|
||||
List<FileInformationDTO> fileList = JSON.parseArray(JSON.toJSONString(pageResult.getList()), FileInformationDTO.class);
|
||||
for (FileInformationDTO fileDTO : fileList) {
|
||||
MvcResult mvcResult = this.downloadFile(String.format(FileManagementRequestUtils.URL_PREVIEW_IMG_FILE_DOWNLOAD, fileDTO.getId()));
|
||||
byte[] fileBytes = mvcResult.getResponse().getContentAsByteArray();
|
||||
MvcResult originalResult = this.downloadFile(String.format(FileManagementRequestUtils.URL_FILE_PREVIEW_ORIGINAL, "admin", fileDTO.getId()));
|
||||
Assertions.assertTrue(originalResult.getResponse().getContentAsByteArray().length > 0);
|
||||
MvcResult compressedResult = this.downloadFile(String.format(FileManagementRequestUtils.URL_FILE_PREVIEW_COMPRESSED, "admin", fileDTO.getId()));
|
||||
byte[] fileBytes = compressedResult.getResponse().getContentAsByteArray();
|
||||
if (TempFileUtils.isImage(fileDTO.getFileType())) {
|
||||
if (StringUtils.equals(reUploadFileId, fileDTO.getId())) {
|
||||
//重新上传的文件并不是图片
|
||||
Assertions.assertEquals(fileBytes.length, 0);
|
||||
} else {
|
||||
Assertions.assertTrue(fileBytes.length > 0);
|
||||
}
|
||||
} else {
|
||||
Assertions.assertEquals(fileBytes.length, 0);
|
||||
}
|
||||
}
|
||||
//测试重复获取
|
||||
for (FileInformationDTO fileDTO : fileList) {
|
||||
MvcResult originalResult = this.downloadFile(String.format(FileManagementRequestUtils.URL_FILE_PREVIEW_ORIGINAL, "admin", fileDTO.getId()));
|
||||
Assertions.assertTrue(originalResult.getResponse().getContentAsByteArray().length > 0);
|
||||
MvcResult compressedResult = this.downloadFile(String.format(FileManagementRequestUtils.URL_FILE_PREVIEW_COMPRESSED, "admin", fileDTO.getId()));
|
||||
byte[] fileBytes = compressedResult.getResponse().getContentAsByteArray();
|
||||
if (TempFileUtils.isImage(fileDTO.getFileType())) {
|
||||
if (StringUtils.equals(reUploadFileId, fileDTO.getId())) {
|
||||
//重新上传的文件并不是图片
|
||||
@ -773,12 +798,29 @@ public class FileManagementControllerTests extends BaseTest {
|
||||
} else {
|
||||
Assertions.assertTrue(fileBytes.length > 0);
|
||||
}
|
||||
|
||||
} else {
|
||||
Assertions.assertEquals(fileBytes.length, 0);
|
||||
}
|
||||
}
|
||||
|
||||
//权限测试
|
||||
|
||||
|
||||
//文件不存在(原图、缩略图两个接口校验)
|
||||
mockMvc.perform(getRequestBuilder(String.format(FileManagementRequestUtils.URL_FILE_PREVIEW_COMPRESSED, "admin", IDGenerator.nextNum())))
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().is5xxServerError());
|
||||
mockMvc.perform(getRequestBuilder(String.format(FileManagementRequestUtils.URL_FILE_PREVIEW_ORIGINAL, "admin", IDGenerator.nextNum())))
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().is5xxServerError());
|
||||
|
||||
//用户不存在(原图、缩略图两个接口校验)
|
||||
mockMvc.perform(getRequestBuilder(String.format(FileManagementRequestUtils.URL_FILE_PREVIEW_COMPRESSED, IDGenerator.nextNum(), picFileId)))
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().is5xxServerError());
|
||||
mockMvc.perform(getRequestBuilder(String.format(FileManagementRequestUtils.URL_FILE_PREVIEW_ORIGINAL, IDGenerator.nextNum(), picFileId)))
|
||||
.andExpect(content().contentType(MediaType.APPLICATION_JSON))
|
||||
.andExpect(status().is5xxServerError());
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -896,6 +938,16 @@ public class FileManagementControllerTests extends BaseTest {
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(23)
|
||||
public void fileInformationTest() throws Exception {
|
||||
MvcResult fileTypeResult = this.requestGetWithOkAndReturn(String.format(FileManagementRequestUtils.URL_FILE, IDGenerator.nextNum()));
|
||||
String returnData = fileTypeResult.getResponse().getContentAsString(StandardCharsets.UTF_8);
|
||||
ResultHolder resultHolder = JSON.parseObject(returnData, ResultHolder.class);
|
||||
FileInformationDTO dto = JSON.parseObject(JSON.toJSONString(resultHolder.getData()), FileInformationDTO.class);
|
||||
Assertions.assertTrue(StringUtils.isEmpty(dto.getId()));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(80)
|
||||
public void moveTest() throws Exception {
|
||||
|
@ -16,6 +16,8 @@ public class FileManagementRequestUtils {
|
||||
public static final String URL_FILE_UPLOAD = "/project/file/upload";
|
||||
//获取文件类型
|
||||
public static final String URL_FILE_TYPE = "/project/file/type/%s";
|
||||
//获取文件
|
||||
public static final String URL_FILE = "/project/file/get/%s";
|
||||
//文件列表查询
|
||||
public static final String URL_FILE_PAGE = "/project/file/page";
|
||||
//文件列表查询对应的模块统计
|
||||
@ -24,8 +26,10 @@ public class FileManagementRequestUtils {
|
||||
public static final String URL_FILE_RE_UPLOAD = "/project/file/re-upload";
|
||||
//文件下载
|
||||
public static final String URL_FILE_DOWNLOAD = "/project/file/download/%s";
|
||||
//文件预览下载
|
||||
public static final String URL_PREVIEW_IMG_FILE_DOWNLOAD = "/project/file/download/preview-img/%s";
|
||||
//文件预览缩略图下载
|
||||
public static final String URL_FILE_PREVIEW_COMPRESSED = "/file/preview/compressed/%s/%s";
|
||||
//文件预览原图下载
|
||||
public static final String URL_FILE_PREVIEW_ORIGINAL = "/file/preview/original/%s/%s";
|
||||
//文件批量下载
|
||||
public static final String URL_FILE_BATCH_DOWNLOAD = "/project/file/batch-download";
|
||||
//文件批量删除
|
||||
|
@ -3,11 +3,11 @@ package io.metersphere.system.utils;
|
||||
import io.metersphere.sdk.constants.InternalUserRole;
|
||||
import io.metersphere.sdk.constants.UserRoleScope;
|
||||
import io.metersphere.sdk.constants.UserRoleType;
|
||||
import io.metersphere.system.dto.sdk.SessionUser;
|
||||
import io.metersphere.sdk.util.CommonBeanFactory;
|
||||
import io.metersphere.sdk.util.LogUtils;
|
||||
import io.metersphere.system.domain.UserRole;
|
||||
import io.metersphere.system.domain.UserRolePermission;
|
||||
import io.metersphere.system.dto.sdk.SessionUser;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import org.apache.commons.collections4.MapUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -168,7 +168,7 @@ public class SessionUtils {
|
||||
return systemPermissions.contains(permission);
|
||||
}
|
||||
|
||||
private static Set<String> getSystemPermissions(Map<String, List<UserRolePermission>> userRolePermissions, Map<String, UserRole> role, SessionUser user) {
|
||||
public static Set<String> getSystemPermissions(Map<String, List<UserRolePermission>> userRolePermissions, Map<String, UserRole> role, SessionUser user) {
|
||||
return user.getUserRoleRelations().stream()
|
||||
.filter(ug -> role.get(ug.getId()) != null && StringUtils.equalsIgnoreCase(role.get(ug.getId()).getType(), UserRoleType.SYSTEM.name()))
|
||||
.filter(ug -> StringUtils.equalsIgnoreCase(ug.getSourceId(), UserRoleScope.SYSTEM))
|
||||
@ -177,7 +177,7 @@ public class SessionUtils {
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
private static Set<String> getCurrentOrganizationPermissions(Map<String, List<UserRolePermission>> userRolePermissions, String organizationId, Map<String, UserRole> role, SessionUser user) {
|
||||
public static Set<String> getCurrentOrganizationPermissions(Map<String, List<UserRolePermission>> userRolePermissions, String organizationId, Map<String, UserRole> role, SessionUser user) {
|
||||
return user.getUserRoleRelations().stream()
|
||||
.filter(ug -> role.get(ug.getId()) != null && StringUtils.equalsIgnoreCase(role.get(ug.getId()).getType(), UserRoleType.ORGANIZATION.name()))
|
||||
.filter(ug -> StringUtils.equalsIgnoreCase(ug.getSourceId(), organizationId))
|
||||
@ -186,7 +186,7 @@ public class SessionUtils {
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
private static Set<String> getCurrentProjectPermissions(Map<String, List<UserRolePermission>> userRolePermissions, String projectId, Map<String, UserRole> role, SessionUser user) {
|
||||
public static Set<String> getCurrentProjectPermissions(Map<String, List<UserRolePermission>> userRolePermissions, String projectId, Map<String, UserRole> role, SessionUser user) {
|
||||
return user.getUserRoleRelations().stream()
|
||||
.filter(ug -> role.get(ug.getId()) != null && StringUtils.equalsIgnoreCase(role.get(ug.getId()).getType(), UserRoleType.PROJECT.name()))
|
||||
.filter(ug -> StringUtils.equalsIgnoreCase(ug.getSourceId(), projectId))
|
||||
|
Loading…
Reference in New Issue
Block a user