fix: 共享去重 + 共享文件夹内容可查看
This commit is contained in:
@@ -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();
|
||||
|
||||
return fileMapper.selectList(wrapper);
|
||||
// 返回该文件夹内的文件(包括自己上传的和别人共享进来的)
|
||||
// 属于 owner 的文件:用 ownerId 查
|
||||
LambdaQueryWrapper<FileEntity> ownerWrapper = new LambdaQueryWrapper<>();
|
||||
ownerWrapper.eq(FileEntity::getFolderId, folderId)
|
||||
.eq(FileEntity::getUserId, ownerId)
|
||||
.eq(FileEntity::getIsDeleted, 0);
|
||||
|
||||
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<>();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user