From aa9f84ea6f90de70b4ec8cfb5b7976f5b948659e Mon Sep 17 00:00:00 2001 From: AirboZH Date: Tue, 21 Nov 2023 14:28:07 +0800 Subject: [PATCH] Prevent private posts from being indexed when rebuilding index. (#4882) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind bug #### What this PR does / why we need it: 在加入索引前判断文章的可见性。只将PUBLIC文章加入索引,修复手动刷新搜索索引会将私有文章加入索引的问题 #### Which issue(s) this PR fixes: Fix #4879 #### Special notes for your reviewer: null #### Does this PR introduce a user-facing change? ```release-note 修复手动刷新搜索索引会将私有文章加入索引的问题 ``` --- .../main/java/run/halo/app/core/extension/content/Post.java | 4 ++++ .../src/main/java/run/halo/app/search/IndicesServiceImpl.java | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/run/halo/app/core/extension/content/Post.java b/api/src/main/java/run/halo/app/core/extension/content/Post.java index fbb432edb5..ebe6b88603 100644 --- a/api/src/main/java/run/halo/app/core/extension/content/Post.java +++ b/api/src/main/java/run/halo/app/core/extension/content/Post.java @@ -81,6 +81,10 @@ public static boolean isPublished(MetadataOperator metadata) { return labels != null && parseBoolean(labels.getOrDefault(PUBLISHED_LABEL, "false")); } + public static boolean isPublic(PostSpec spec) { + return spec.getVisible() == null || VisibleEnum.PUBLIC.equals(spec.getVisible()); + } + @Data public static class PostSpec { @Schema(requiredMode = RequiredMode.REQUIRED, minLength = 1) diff --git a/application/src/main/java/run/halo/app/search/IndicesServiceImpl.java b/application/src/main/java/run/halo/app/search/IndicesServiceImpl.java index 9c52f60395..e2e3ae4203 100644 --- a/application/src/main/java/run/halo/app/search/IndicesServiceImpl.java +++ b/application/src/main/java/run/halo/app/search/IndicesServiceImpl.java @@ -40,7 +40,8 @@ public Mono rebuildPostIndices() { private Mono rebuildPostIndices(PostSearchService searchService) { return postFinder.listAll() - .filter(post -> Post.isPublished(post.getMetadata())) + .filter( + post -> Post.isPublished(post.getMetadata()) && Post.isPublic(post.getSpec())) .flatMap(listedPostVo -> { PostVo postVo = PostVo.from(listedPostVo); return postFinder.content(postVo.getMetadata().getName())