fix: 共享去重 + 共享文件夹内容可查看

This commit is contained in:
2026-04-03 16:52:05 +08:00
parent 9ff222c22c
commit dc666897c6

View File

@@ -344,9 +344,13 @@ public class FileService {
new LambdaQueryWrapper<FileShare>().eq(FileShare::getShareToUserId, userId)
);
// 按 fileId 去重,只保留一条记录
return shares.stream()
.map(share -> fileMapper.selectById(share.getFileId()))
.filter(f -> f != null && f.getIsDeleted() == 0)
.collect(Collectors.toMap(FileEntity::getId, f -> f, (a, b) -> a))
.values()
.stream()
.collect(Collectors.toList());
}
@@ -358,7 +362,7 @@ public class FileService {
return new ArrayList<>();
}
// 检查是否有共享权限
// 检查是否有共享权限(当前用户是被共享的对象)
List<FileShare> shares = fileShareMapper.selectList(
new LambdaQueryWrapper<FileShare>()
.eq(FileShare::getFileId, folderId)
@@ -369,13 +373,33 @@ public class FileService {
return new ArrayList<>();
}
// 返回该文件夹内的文件
LambdaQueryWrapper<FileEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(FileEntity::getFolderId, folderId)
.eq(FileEntity::getIsDeleted, 0)
.isNull(FileEntity::getDeletedAt);
// 用文件夹原主人的 ID 查询子文件(属于文件夹所有者的文件)
Long ownerId = folder.getUserId();
// 返回该文件夹内的文件(包括自己上传的和别人共享进来的)
// 属于 owner 的文件:用 ownerId 查
LambdaQueryWrapper<FileEntity> ownerWrapper = new LambdaQueryWrapper<>();
ownerWrapper.eq(FileEntity::getFolderId, folderId)
.eq(FileEntity::getUserId, ownerId)
.eq(FileEntity::getIsDeleted, 0);
return fileMapper.selectList(wrapper);
List<FileEntity> results = new ArrayList<>(fileMapper.selectList(ownerWrapper));
// 属于当前用户的文件(通过共享进入的子文件夹),去掉 deleted 条件
LambdaQueryWrapper<FileEntity> userWrapper = new LambdaQueryWrapper<>();
userWrapper.eq(FileEntity::getFolderId, folderId)
.ne(FileEntity::getUserId, ownerId)
.eq(FileEntity::getIsDeleted, 0);
List<FileEntity> sharedChildren = fileMapper.selectList(userWrapper);
for (FileEntity child : sharedChildren) {
// 只有当前用户有权访问的才加入(直接共享或通过父文件夹共享)
if (canAccessFile(child.getId(), userId)) {
results.add(child);
}
}
return results;
} catch (Exception e) {
return new ArrayList<>();
}