fix: 共享去重 + 共享文件夹内容可查看
This commit is contained in:
@@ -344,9 +344,13 @@ public class FileService {
|
|||||||
new LambdaQueryWrapper<FileShare>().eq(FileShare::getShareToUserId, userId)
|
new LambdaQueryWrapper<FileShare>().eq(FileShare::getShareToUserId, userId)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// 按 fileId 去重,只保留一条记录
|
||||||
return shares.stream()
|
return shares.stream()
|
||||||
.map(share -> fileMapper.selectById(share.getFileId()))
|
.map(share -> fileMapper.selectById(share.getFileId()))
|
||||||
.filter(f -> f != null && f.getIsDeleted() == 0)
|
.filter(f -> f != null && f.getIsDeleted() == 0)
|
||||||
|
.collect(Collectors.toMap(FileEntity::getId, f -> f, (a, b) -> a))
|
||||||
|
.values()
|
||||||
|
.stream()
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -358,7 +362,7 @@ public class FileService {
|
|||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查是否有共享权限
|
// 检查是否有共享权限(当前用户是被共享的对象)
|
||||||
List<FileShare> shares = fileShareMapper.selectList(
|
List<FileShare> shares = fileShareMapper.selectList(
|
||||||
new LambdaQueryWrapper<FileShare>()
|
new LambdaQueryWrapper<FileShare>()
|
||||||
.eq(FileShare::getFileId, folderId)
|
.eq(FileShare::getFileId, folderId)
|
||||||
@@ -369,13 +373,33 @@ public class FileService {
|
|||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 返回该文件夹内的文件
|
// 用文件夹原主人的 ID 查询子文件(属于文件夹所有者的文件)
|
||||||
LambdaQueryWrapper<FileEntity> wrapper = new LambdaQueryWrapper<>();
|
Long ownerId = folder.getUserId();
|
||||||
wrapper.eq(FileEntity::getFolderId, folderId)
|
|
||||||
.eq(FileEntity::getIsDeleted, 0)
|
|
||||||
.isNull(FileEntity::getDeletedAt);
|
|
||||||
|
|
||||||
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) {
|
} catch (Exception e) {
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user