From 93ffb7d8eaef9d53bc4fdaf2f5b42cc75bba0fd8 Mon Sep 17 00:00:00 2001 From: John Niang Date: Fri, 6 Sep 2024 22:01:52 +0800 Subject: [PATCH] Prevent null role while getting permissions (#6612) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### What type of PR is this? /kind bug /area core /milestone 2.20.x #### What this PR does / why we need it: This PR filters blank role name while granting roles for an user to prevent null role in permissions. #### Which issue(s) this PR fixes: Fixes https://github.com/halo-dev/halo/issues/6604 #### Does this PR introduce a user-facing change? ```release-note 修复取消用户角色后无法正常渲染用户列表的问题 ``` --- .../run/halo/app/core/extension/endpoint/UserEndpoint.java | 6 +++++- .../halo/app/core/extension/service/UserServiceImpl.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/application/src/main/java/run/halo/app/core/extension/endpoint/UserEndpoint.java b/application/src/main/java/run/halo/app/core/extension/endpoint/UserEndpoint.java index 74d2bb0b5..d8bc8bd98 100644 --- a/application/src/main/java/run/halo/app/core/extension/endpoint/UserEndpoint.java +++ b/application/src/main/java/run/halo/app/core/extension/endpoint/UserEndpoint.java @@ -771,7 +771,11 @@ public class UserEndpoint implements CustomEndpoint { .map(user -> { var username = user.getMetadata().getName(); var roles = Optional.ofNullable(usernameRolesMap.get(username)) - .map(roleNames -> roleNames.stream().map(roleMap::get).toList()) + .map(roleNames -> roleNames.stream() + .map(roleMap::get) + .filter(Objects::nonNull) + .toList() + ) .orElseGet(List::of); return new ListedUser(user, roles); }) diff --git a/application/src/main/java/run/halo/app/core/extension/service/UserServiceImpl.java b/application/src/main/java/run/halo/app/core/extension/service/UserServiceImpl.java index eb5594637..5d9f85fcd 100644 --- a/application/src/main/java/run/halo/app/core/extension/service/UserServiceImpl.java +++ b/application/src/main/java/run/halo/app/core/extension/service/UserServiceImpl.java @@ -133,6 +133,7 @@ public class UserServiceImpl implements UserService { var mutableRoles = new HashSet<>(roles); mutableRoles.removeAll(existingRoles); return mutableRoles.stream() + .filter(StringUtils::hasText) .map(roleName -> RoleBinding.create(username, roleName)); }).flatMap(client::create)) .then(Mono.defer(() -> {