From 171d4761e6cbda861a6b933dade3368de83eb376 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90?= <73240868+JustinLiang522@users.noreply.github.com> Date: Sat, 25 Feb 2023 22:18:16 +0800 Subject: [PATCH] fix: exclude ghost and anonymous user when counting users (#3370) 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: 后台进行用户数量统计时,排除ghost和anonymousUser #### Which issue(s) this PR fixes: Fixes #3349 #### Does this PR introduce a user-facing change? ```release-note 修复仪表盘用户数显示错误问题 ``` --- src/main/java/run/halo/app/core/extension/User.java | 2 ++ .../halo/app/core/extension/endpoint/StatsEndpoint.java | 8 +++++++- src/main/resources/extensions/user.yaml | 4 ++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/run/halo/app/core/extension/User.java b/src/main/java/run/halo/app/core/extension/User.java index b28a51025..fd5d661ac 100644 --- a/src/main/java/run/halo/app/core/extension/User.java +++ b/src/main/java/run/halo/app/core/extension/User.java @@ -34,6 +34,8 @@ public class User extends AbstractExtension { public static final String ROLE_NAMES_ANNO = "rbac.authorization.halo.run/role-names"; + public static final String HIDDEN_USER_LABEL = "halo.run/hidden-user"; + @Schema(required = true) private UserSpec spec; diff --git a/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java b/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java index 313b6a151..16507674c 100644 --- a/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java +++ b/src/main/java/run/halo/app/core/extension/endpoint/StatsEndpoint.java @@ -1,5 +1,6 @@ package run.halo.app.core.extension.endpoint; +import static java.lang.Boolean.parseBoolean; import static org.springdoc.core.fn.builders.apiresponse.Builder.responseBuilder; import lombok.Data; @@ -12,6 +13,7 @@ import reactor.core.publisher.Mono; import run.halo.app.core.extension.Counter; import run.halo.app.core.extension.User; import run.halo.app.core.extension.content.Post; +import run.halo.app.extension.ExtensionUtil; import run.halo.app.extension.ReactiveExtensionClient; /** @@ -54,7 +56,11 @@ public class StatsEndpoint implements CustomEndpoint { return stats; }) .flatMap(stats -> client.list(User.class, - user -> user.getMetadata().getDeletionTimestamp() == null, + user -> { + var labels = ExtensionUtil.nullSafeLabels(user); + return user.getMetadata().getDeletionTimestamp() == null + && !parseBoolean(labels.getOrDefault(User.HIDDEN_USER_LABEL, "false")); + }, null) .count() .map(count -> { diff --git a/src/main/resources/extensions/user.yaml b/src/main/resources/extensions/user.yaml index 776b4aa07..8658a9906 100644 --- a/src/main/resources/extensions/user.yaml +++ b/src/main/resources/extensions/user.yaml @@ -2,6 +2,8 @@ apiVersion: v1alpha1 kind: User metadata: name: anonymousUser + labels: + halo.run/hidden-user: "true" finalizers: - system-protection spec: @@ -14,6 +16,8 @@ apiVersion: v1alpha1 kind: User metadata: name: ghost + labels: + halo.run/hidden-user: "true" finalizers: - system-protection spec: