Commit 4d3514d1 authored by 刘基明's avatar 刘基明

权限过滤2

parent 0c221fdb
...@@ -506,7 +506,7 @@ public class ThemeManager { ...@@ -506,7 +506,7 @@ public class ThemeManager {
Set<String> userPermitTopics = topicService.getUserPermitTopics(userId); Set<String> userPermitTopics = topicService.getUserPermitTopics(userId);
// 排序并去重 // 排序并去重
themes = RankUtils.sortThemeEntityByIds(themes, recmdIds,userPermitTopics).stream().limit(pageSize).collect(Collectors.toList()); themes = RankUtils.sortThemeEntityByIds(themes, recmdIds, userPermitTopics).stream().limit(pageSize).collect(Collectors.toList());
} else if (ThemeListTypeEnum.FOLLOW.getCode().equals(req.getType())) { } else if (ThemeListTypeEnum.FOLLOW.getCode().equals(req.getType())) {
...@@ -516,7 +516,12 @@ public class ThemeManager { ...@@ -516,7 +516,12 @@ public class ThemeManager {
} else { } else {
// 根据关注列表查询,按时间倒序 // 根据关注列表查询,按时间倒序
List<String> fansList = followRelService.queryIdolsByFansId(req.getUserId()); List<String> fansList = followRelService.queryIdolsByFansId(req.getUserId());
themes = themeService.queryByUserIdsCreateDesc(fansList, pageStart, pageSize);
// 权限控制,筛选出当前用户有权限的话题
Set<String> userPermitTopics = topicService.getUserPermitTopics(userId);
// 查库
themes = themeService.queryByUserIdsCreateDesc(fansList, pageStart, pageSize, userPermitTopics);
if (CollectionUtils.isEmpty(excludeIds) && !themes.isEmpty()) { if (CollectionUtils.isEmpty(excludeIds) && !themes.isEmpty()) {
// 说明是从头开始刷,则直接把最新的lastId放到redis中,保留一个月 // 说明是从头开始刷,则直接把最新的lastId放到redis中,保留一个月
...@@ -555,7 +560,7 @@ public class ThemeManager { ...@@ -555,7 +560,7 @@ public class ThemeManager {
// 讨论区添加是否管理员,是否顶置 // 讨论区添加是否管理员,是否顶置
if (ThemeListTypeEnum.TOPIC_LATEST.getCode().equals(req.getType()) if (ThemeListTypeEnum.TOPIC_LATEST.getCode().equals(req.getType())
|| ThemeListTypeEnum.TOPIC_HOT.getCode().equals(req.getType())) { || ThemeListTypeEnum.TOPIC_HOT.getCode().equals(req.getType())) {
topicService.checkManager(req.getTopicId(),resp.themes); topicService.checkManager(req.getTopicId(), resp.themes);
} }
// 保存缓存、记录已浏览 // 保存缓存、记录已浏览
...@@ -672,22 +677,26 @@ public class ThemeManager { ...@@ -672,22 +677,26 @@ public class ThemeManager {
public List<ThemeQo> queryThemesByUser(QueryRecordThemeReq req, String userId) { public List<ThemeQo> queryThemesByUser(QueryRecordThemeReq req, String userId) {
List<ThemeEntity> themeEntities = Collections.emptyList(); List<ThemeEntity> themeEntities = Collections.emptyList();
// 权限控制,筛选出当前用户有权限的话题
Set<String> userPermitTopics = topicService.getUserPermitTopics(userId);
switch (req.getRecordType()) { switch (req.getRecordType()) {
case 1://发布 case 1://发布
themeEntities = themeService.queryThemesByUserIdCreateDesc(req.getUserId(), req.getLastId(), req.getPageSize()); themeEntities = themeService.queryThemesByUserIdCreateDesc(req.getUserId(), req.getLastId(), req.getPageSize(), userPermitTopics);
break; break;
case 2://回复 case 2://回复
List<ThemeQo> commentThemeList = getCommentThemeQos(req, userId); List<ThemeQo> commentThemeList = getCommentThemeQos(req, userId);
return commentThemeList; return commentThemeList;
case 3://点赞 case 3://点赞
List<String> likeThemeIds = collectionService.getListByUser(req.getUserId(), CollectionTypeEnum.LIKE_THEME, req.getLastId(), req.getPageSize()); List<String> likeThemeIds = collectionService.getListByUser(req.getUserId(), CollectionTypeEnum.LIKE_THEME, req.getLastId(), req.getPageSize());
themeEntities = themeService.queryByThemeIds(likeThemeIds); themeEntities = themeService.queryByThemeIds(likeThemeIds, req.getLastId(), req.getPageSize(), userPermitTopics);
themeEntities = RankUtils.sortThemeEntityByIds(themeEntities, likeThemeIds); themeEntities = RankUtils.sortThemeEntityByIds(themeEntities, likeThemeIds);
break; break;
case 4://收藏 case 4://收藏
List<String> collectThemeIds = collectionService.getListByUser(req.getUserId(), CollectionTypeEnum.COLLECT_THEME, req.getLastId(), req.getPageSize()); List<String> collectThemeIds = collectionService.getListByUser(req.getUserId(), CollectionTypeEnum.COLLECT_THEME, req.getLastId(), req.getPageSize());
themeEntities = themeService.queryByThemeIds(collectThemeIds, req.getLastId(), req.getPageSize()); themeEntities = themeService.queryByThemeIds(collectThemeIds, req.getLastId(), req.getPageSize(), userPermitTopics);
themeEntities = RankUtils.sortThemeEntityByIds(themeEntities, collectThemeIds); themeEntities = RankUtils.sortThemeEntityByIds(themeEntities, collectThemeIds);
break; break;
} }
......
...@@ -99,10 +99,11 @@ public class ThemeService { ...@@ -99,10 +99,11 @@ public class ThemeService {
} }
//根据用户id查询主题list //根据用户id查询主题list
public List<ThemeEntity> queryThemesByUserIdCreateDesc(String userId, String lastId, Integer pageSize) { public List<ThemeEntity> queryThemesByUserIdCreateDesc(String userId, String lastId, Integer pageSize, Set<String> userPermitTopics) {
LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>() LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
.eq(ThemeEntity::getAuthorId, userId) .eq(ThemeEntity::getAuthorId, userId)
.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode()) .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode())
.in(ThemeEntity::getTopicId, userPermitTopics)
.orderByDesc(ThemeEntity::getCreateTime); .orderByDesc(ThemeEntity::getCreateTime);
if (StringUtils.isNotEmpty(lastId)) { if (StringUtils.isNotEmpty(lastId)) {
ThemeEntity lastEntity = queryByThemeId(lastId); ThemeEntity lastEntity = queryByThemeId(lastId);
...@@ -134,6 +135,26 @@ public class ThemeService { ...@@ -134,6 +135,26 @@ public class ThemeService {
return themeMapper.selectList(queryWrapper); return themeMapper.selectList(queryWrapper);
} }
//根据ids返回主题详情,带分页
public List<ThemeEntity> queryByThemeIds(List<String> themeIds, String lastId, Integer pageSize, Set<String> userPermitTopics) {
if (CollectionUtils.isEmpty(themeIds)) {
return Collections.emptyList();
}
LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
.in(ThemeEntity::getThemeId, themeIds)
.in(ThemeEntity::getTopicId, userPermitTopics)
.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
if (StringUtils.isNotEmpty(lastId)) {
ThemeEntity lastEntity = queryByThemeId(lastId);
if (lastEntity == null) throw new BizException("主题未找到,id:" + lastId);
queryWrapper.lt(ThemeEntity::getCreateTime, lastEntity.getCreateTime());
}
if (pageSize != null) {
queryWrapper.last("limit " + pageSize);
}
return themeMapper.selectList(queryWrapper);
}
/** /**
* 根据主题Id查询列表 * 根据主题Id查询列表
* *
...@@ -189,14 +210,18 @@ public class ThemeService { ...@@ -189,14 +210,18 @@ public class ThemeService {
* @param userIds * @param userIds
* @param pageStart * @param pageStart
* @param pageSize * @param pageSize
* @param userPermitTopics
* @return * @return
*/ */
public List<ThemeEntity> queryByUserIdsCreateDesc(List<String> userIds, Integer pageStart, Integer pageSize) { public List<ThemeEntity> queryByUserIdsCreateDesc(List<String> userIds, Integer pageStart, Integer pageSize, Set<String> userPermitTopics) {
if (CollectionUtils.isEmpty(userIds)) { if (CollectionUtils.isEmpty(userIds)) {
return Collections.emptyList(); return Collections.emptyList();
} }
// 权限控制,添加主题为空的情况
userPermitTopics.add("");
LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>() LambdaQueryWrapper<ThemeEntity> queryWrapper = new LambdaQueryWrapper<ThemeEntity>()
.in(ThemeEntity::getAuthorId, userIds) .in(ThemeEntity::getAuthorId, userIds)
.in(ThemeEntity::getTopicId, userPermitTopics)
.last("limit " + pageStart + ", " + pageSize) .last("limit " + pageStart + ", " + pageSize)
.orderByDesc(ThemeEntity::getCreateTime) .orderByDesc(ThemeEntity::getCreateTime)
.eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode()); .eq(ThemeEntity::getDeleteTag, DeleteTagEnum.NOT_DELETED.getCode());
......
...@@ -302,6 +302,8 @@ public class TopicService { ...@@ -302,6 +302,8 @@ public class TopicService {
Set<String> openTopicIds = openTopics.stream().map(TopicEntity::getTopicId).collect(Collectors.toSet()); Set<String> openTopicIds = openTopics.stream().map(TopicEntity::getTopicId).collect(Collectors.toSet());
openTopicIds.add("");
if (StringUtils.isBlank(userId)) { if (StringUtils.isBlank(userId)) {
return openTopicIds; return openTopicIds;
} }
......
...@@ -45,8 +45,7 @@ public class RankUtils { ...@@ -45,8 +45,7 @@ public class RankUtils {
List<ThemeEntity> themes = list.stream().filter(o -> { List<ThemeEntity> themes = list.stream().filter(o -> {
if (StringUtils.isBlank(o.getTopicId())) return true; if (StringUtils.isBlank(o.getTopicId())) return true;
if (topicIds.contains(o.getTopicId())) return true; return topicIds.contains(o.getTopicId());
return false;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return sortThemeEntityByIds(themes, recmdIds); return sortThemeEntityByIds(themes, recmdIds);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment