This is an automated email from the ASF dual-hosted git repository.

xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git

commit beabe662fd745466f0e8b0ece9f2e96b0eaa9fea
Author: Jiale He <35652389+jial...@users.noreply.github.com>
AuthorDate: Wed Jan 4 21:33:17 2023 +0800

    KYLIN-5457 fix user group delete
---
 .../kylin/rest/service/NUserGroupService.java      | 33 ++++++++++------------
 .../kylin/rest/service/NUserGroupServiceTest.java  | 21 ++++++++++++++
 .../metadata/usergroup/NUserGroupManager.java      |  2 +-
 .../metadata/usergroup/NUserGroupManagerTest.java  |  2 +-
 4 files changed, 38 insertions(+), 20 deletions(-)

diff --git 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/NUserGroupService.java
 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/NUserGroupService.java
index c8a50fdbb4..7983384e18 100644
--- 
a/src/common-service/src/main/java/org/apache/kylin/rest/service/NUserGroupService.java
+++ 
b/src/common-service/src/main/java/org/apache/kylin/rest/service/NUserGroupService.java
@@ -106,16 +106,15 @@ public class NUserGroupService implements 
IUserGroupService {
         aclEvaluate.checkIsGlobalAdmin();
         checkGroupCanBeDeleted(name);
         // remove retained user group in all users
-        List<ManagedUser> managedUsers = userService.listUsers();
-        for (ManagedUser managedUser : managedUsers) {
-            if (managedUser.getAuthorities().contains(new 
SimpleGrantedAuthority(name))) {
-                managedUser.removeAuthorities(name);
-                userService.updateUser(managedUser);
-            }
-        }
+        SimpleGrantedAuthority simpleAuthority = new 
SimpleGrantedAuthority(name);
+        userService.listUsers(false).stream().filter(
+                user -> 
user.getAuthorities().parallelStream().anyMatch(authority -> 
authority.equals(simpleAuthority)))
+                .forEach(user -> {
+                    user.removeAuthorities(name);
+                    userService.updateUser(user);
+                });
         //delete group's project ACL
         accessService.revokeProjectPermission(name, 
MetadataConstants.TYPE_GROUP);
-
         getUserGroupManager().delete(name);
     }
 
@@ -126,10 +125,8 @@ public class NUserGroupService implements 
IUserGroupService {
         aclEvaluate.checkIsGlobalAdmin();
         checkGroupNameExist(groupName);
 
-        List<String> groupUsers = new ArrayList<>();
-        for (ManagedUser user : getGroupMembersByName(groupName)) {
-            groupUsers.add(user.getUsername());
-        }
+        List<String> groupUsers = 
getGroupMembersByName(groupName).stream().map(ManagedUser::getUsername)
+                .collect(Collectors.toList());
         List<String> moveInUsers = Lists.newArrayList(users);
         List<String> moveOutUsers = Lists.newArrayList(groupUsers);
         moveInUsers.removeAll(groupUsers);
@@ -139,7 +136,7 @@ public class NUserGroupService implements IUserGroupService 
{
 
         String currentUser = aclEvaluate.getCurrentUserName();
 
-        List<String> moveList = new ArrayList<String>();
+        List<String> moveList = Lists.newArrayList();
         moveList.addAll(moveInUsers);
         moveList.addAll(moveOutUsers);
         val superAdminList = userService.listSuperAdminUsers();
@@ -193,7 +190,7 @@ public class NUserGroupService implements IUserGroupService 
{
         if (StringUtils.isEmpty(userGroupName)) {
             return listUserGroups();
         }
-        return getUserGroupManager().getAllUsers(path -> {
+        return getUserGroupManager().getAllGroups(path -> {
             val pathPair = StringUtils.split(path, "/");
             String groupName = pathPair[pathPair.length - 1];
             return StringUtils.containsIgnoreCase(groupName, userGroupName);
@@ -218,13 +215,13 @@ public class NUserGroupService implements 
IUserGroupService {
             throw new KylinException(USERGROUP_NOT_EXIST,
                     String.format(Locale.ROOT, 
MsgPicker.getMsg().getUserGroupNotExist(), groupName));
         }
-        List<UserGroup> userGroups = getUserGroupManager()
-                .getAllUsers(path -> StringUtils.endsWithIgnoreCase(path, 
groupName));
-        if (userGroups.isEmpty()) {
+        val optional = getUserGroupManager().getAllGroups(path -> 
StringUtils.endsWithIgnoreCase(path, groupName))
+                .stream().filter(group -> 
StringUtils.equalsIgnoreCase(group.getGroupName(), groupName)).findFirst();
+        if (!optional.isPresent()) {
             throw new KylinException(USERGROUP_NOT_EXIST,
                     String.format(Locale.ROOT, 
MsgPicker.getMsg().getUserGroupNotExist(), groupName));
         }
-        return userGroups.get(0).getUuid();
+        return optional.get().getUuid();
     }
 
     public boolean exists(String name) {
diff --git 
a/src/common-service/src/test/java/org/apache/kylin/rest/service/NUserGroupServiceTest.java
 
b/src/common-service/src/test/java/org/apache/kylin/rest/service/NUserGroupServiceTest.java
index cda761931c..93de1a097b 100644
--- 
a/src/common-service/src/test/java/org/apache/kylin/rest/service/NUserGroupServiceTest.java
+++ 
b/src/common-service/src/test/java/org/apache/kylin/rest/service/NUserGroupServiceTest.java
@@ -32,6 +32,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.exception.ExceptionUtils;
 import org.apache.kylin.common.exception.KylinException;
 import org.apache.kylin.common.persistence.transaction.TransactionException;
+import org.apache.kylin.metadata.usergroup.NUserGroupManager;
 import org.apache.kylin.metadata.user.ManagedUser;
 import org.apache.kylin.metadata.usergroup.UserGroup;
 import org.apache.kylin.rest.response.UserGroupResponseKI;
@@ -217,6 +218,26 @@ public class NUserGroupServiceTest extends ServiceTestBase 
{
         Assert.assertEquals(Lists.newArrayList("g1", "g2", "g3"), 
userGroupService.getAllUserGroups());
     }
 
+    @Test
+    public void testDeleteAdminNameGroup() throws IOException {
+        String adminGroupName = "admin";
+        NUserGroupManager manager = 
NUserGroupManager.getInstance(getTestConfig());
+        Assert.assertFalse(userGroupService.exists(adminGroupName));
+        Assert.assertFalse(manager.exists(adminGroupName));
+        // add 'admin' group
+        userGroupService.addGroup(adminGroupName);
+        Assert.assertTrue(userGroupService.exists(adminGroupName));
+        Assert.assertTrue(manager.exists(adminGroupName));
+        // check 'admin' group uuid
+        String adminUUID = userGroupService.getUuidByGroupName(adminGroupName);
+        manager.getAllGroups().stream().filter(group -> 
group.getGroupName().equalsIgnoreCase(adminGroupName))
+                .findFirst().ifPresent(userGroup -> 
Assert.assertEquals(userGroup.getUuid(), adminUUID));
+        // delete 'admin' group
+        userGroupService.deleteGroup(adminGroupName);
+        Assert.assertFalse(userGroupService.exists(adminGroupName));
+        Assert.assertFalse(manager.exists(adminGroupName));
+    }
+
     private void checkDelUserGroupWithException(String groupName) {
         try {
             userGroupService.deleteGroup(groupName);
diff --git 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/usergroup/NUserGroupManager.java
 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/usergroup/NUserGroupManager.java
index f9c5115f66..32fd77f381 100644
--- 
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/usergroup/NUserGroupManager.java
+++ 
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/usergroup/NUserGroupManager.java
@@ -91,7 +91,7 @@ public class NUserGroupManager {
         return ImmutableList.copyOf(crud.listAll());
     }
 
-    public List<UserGroup> getAllUsers(Predicate<String> predicate) {
+    public List<UserGroup> getAllGroups(Predicate<String> predicate) {
         return ImmutableList.copyOf(crud.listPartial(predicate));
     }
 
diff --git 
a/src/core-metadata/src/test/java/org/apache/kylin/metadata/usergroup/NUserGroupManagerTest.java
 
b/src/core-metadata/src/test/java/org/apache/kylin/metadata/usergroup/NUserGroupManagerTest.java
index 96647be4f0..58bf84d092 100644
--- 
a/src/core-metadata/src/test/java/org/apache/kylin/metadata/usergroup/NUserGroupManagerTest.java
+++ 
b/src/core-metadata/src/test/java/org/apache/kylin/metadata/usergroup/NUserGroupManagerTest.java
@@ -52,7 +52,7 @@ public class NUserGroupManagerTest extends 
NLocalFileMetadataTestCase {
         Assert.assertTrue(group.exists("g1"));
         Assert.assertFalse(group.exists("g4"));
         Assert.assertEquals(Lists.newArrayList("g1", "g2", "g3"), 
group.getAllGroupNames());
-        Assert.assertEquals("g1", group.getAllUsers(path -> 
path.endsWith("g1")).get(0).getGroupName());
+        Assert.assertEquals("g1", group.getAllGroups(path -> 
path.endsWith("g1")).get(0).getGroupName());
 
         Assert.assertThrows(String.format(Locale.ROOT, 
MsgPicker.getMsg().getUserGroupExist(), "g1"),
                 KylinException.class, () -> group.add("g1"));

Reply via email to