From 7d44f70b1db22832e5d22acaa9b216e127b6d3da Mon Sep 17 00:00:00 2001 From: felmer <franz-josef.elmer@id.ethz.ch> Date: Wed, 9 May 2018 10:56:26 +0200 Subject: [PATCH] SSDM-6061: Bug fixed: Removed users are not removed from authorization group ALL_GROUPS. New test added for this case. --- .../generic/server/task/UserManager.java | 5 ++ .../systemtest/task/UserManagerTest.java | 50 ++++++++++++++++++- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/task/UserManager.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/task/UserManager.java index 7415906d9e0..a163ced6782 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/task/UserManager.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/task/UserManager.java @@ -599,6 +599,11 @@ public class UserManager { removePersonFromAuthorizationGroup(context, groupCode, userId); removePersonFromAuthorizationGroup(context, adminGroupCode, userId); + AuthorizationGroup globalGroup = context.currentState.getGlobalGroup(); + if (globalGroup != null) + { + removePersonFromAuthorizationGroup(context, globalGroup.getCode(), userId); + } Person user = context.currentState.getUser(userId); Space homeSpace = user.getSpace(); for (RoleAssignment roleAssignment : user.getRoleAssignments()) diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerTest.java index 04f9518ea9e..8c244ea3d40 100644 --- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerTest.java +++ b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/systemtest/task/UserManagerTest.java @@ -130,6 +130,46 @@ public class UserManagerTest extends AbstractTest builder.assertExpectations(); } + @Test + public void testAddAndRemoveAUserWhichAlreadyHasAHomeSpace() + { + // Given + // 1. create user U2 with home space TEST-SPACE and SPACE_ADMIN on this space + createUserForTestSpace(U2); + // 2. create groip G1 with users U1 (admin) and U2 + MockLogger logger = new MockLogger(); + Map<Role, List<String>> commonSpaces = commonSpaces(); + UserManager userManager = new UserManagerBuilder(v3api, logger).commonSpaces(commonSpaces).get(); + userManager.setGlobalSpaces(Arrays.asList("A")); + userManager.addGroup(group("G1", U1.getUserId(), "blabla"), users(U1, U2)); + assertEquals(manage(userManager).getErrorReport(), ""); + createBuilder().groups("G1").space("A").observer(U1, U2).assertExpectations(); + // 3. remove U2 from G1 + userManager = new UserManagerBuilder(v3api, logger).commonSpaces(commonSpaces).get(); + userManager.setGlobalSpaces(Arrays.asList("A")); + userManager.addGroup(group("G1", U1.getUserId()), users(U1)); + + // When + UserManagerReport report = manage(userManager); + + // Then + assertEquals(report.getErrorReport(), ""); + assertEquals(report.getAuditLog(), "1970-01-01 01:00:00 [REMOVE-USER-FROM-AUTHORIZATION-GROUP] group: G1, user: u2\n" + + "1970-01-01 01:00:01 [REMOVE-USER-FROM-AUTHORIZATION-GROUP] group: ALL_GROUPS, user: u2\n" + + "1970-01-01 01:00:02 [UNASSIGN-ROLE-FORM-USER] user: u2, role: SPACE_ADMIN for G1_U2\n"); + UserManagerExpectationsBuilder builder = createBuilder(); + builder.groups("G1").commonSpaces(commonSpaces).users(U1, U2); + builder.space("A").observer(U1).non(U2); + builder.space("G1_ALPHA").admin(U1).non(U2); + builder.space("G1_BETA").admin(U1).non(U2); + builder.space("G1_GAMMA").admin(U1).non(U2); + builder.space("G1_U1").admin(U1).non(U2); + builder.space("G1_U2").admin(U1).non(U2); + builder.homeSpace(U1, "G1_U1"); + builder.homeSpace(U2, "TEST-SPACE"); + builder.assertExpectations(); + } + @Test public void testAddGlobalSpacesAndCommonSpacesSamplesAndExperiments() { @@ -486,10 +526,13 @@ public class UserManagerTest extends AbstractTest MockLogger logger = new MockLogger(); Map<Role, List<String>> commonSpaces = commonSpaces(); UserManager userManager = new UserManagerBuilder(v3api, logger).commonSpaces(commonSpaces).get(); + List<String> globalSpaces = Arrays.asList("A", "B"); + userManager.setGlobalSpaces(globalSpaces); userManager.addGroup(group("G2", U1.getUserId()), users(U1, U2, U3)); assertEquals(manage(userManager).getErrorReport(), ""); // 2. remove U2 from group G2 userManager = new UserManagerBuilder(v3api, logger).commonSpaces(commonSpaces).get(); + userManager.setGlobalSpaces(globalSpaces); userManager.addGroup(group("G2", U1.getUserId()), users(U1, U3)); // When @@ -498,11 +541,14 @@ public class UserManagerTest extends AbstractTest // Then assertEquals(report.getErrorReport(), ""); assertEquals(report.getAuditLog(), "1970-01-01 01:00:00 [REMOVE-USER-FROM-AUTHORIZATION-GROUP] group: G2, user: u2\n" - + "1970-01-01 01:00:01 [UNASSIGN-ROLE-FORM-USER] user: u2, role: SPACE_ADMIN for G2_U2\n" - + "1970-01-01 01:00:02 [REMOVE-HOME-SPACE-FROM-USER] u2\n"); + + "1970-01-01 01:00:01 [REMOVE-USER-FROM-AUTHORIZATION-GROUP] group: ALL_GROUPS, user: u2\n" + + "1970-01-01 01:00:02 [UNASSIGN-ROLE-FORM-USER] user: u2, role: SPACE_ADMIN for G2_U2\n" + + "1970-01-01 01:00:03 [REMOVE-HOME-SPACE-FROM-USER] u2\n"); UserManagerExpectationsBuilder builder = createBuilder(); builder.groups("G2").commonSpaces(commonSpaces).users(U1, U3); builder.usersWithoutAuthentication(U2); + builder.space("A").observer(U1).observer(U3); + builder.space("B").observer(U1).observer(U3); builder.space("G2_ALPHA").admin(U1).user(U3); builder.space("G2_BETA").admin(U1).user(U3); builder.space("G2_GAMMA").admin(U1).observer(U3); -- GitLab