mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-22 21:55:39 +00:00
bug4006: added tests for default creation group merging
This commit is contained in:
+19
-1
@@ -3,6 +3,7 @@ package com.sap.sse.security.storemerging;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -29,7 +30,11 @@ public class TestACLMerge extends AbstractStoreMergeTest {
|
||||
/**
|
||||
* Validates that an ACL for an object for which the target has an ACL is merged correctly: groups for which no
|
||||
* action permissions have been specified in the target are added; action permission sets for groups for which the
|
||||
* target already has permissions are merged
|
||||
* target already has permissions are merged<p>
|
||||
*
|
||||
* As a "drive-by," this test also validates that a default creation group for a server for which the
|
||||
* target already has one set for a user is not overwritten, and that default creation group settings
|
||||
* are added if the target user has no default creation group set yet for that server name.
|
||||
*/
|
||||
@Test
|
||||
public void testACLMerge() throws UserGroupManagementException, UserManagementException {
|
||||
@@ -38,6 +43,10 @@ public class TestACLMerge extends AbstractStoreMergeTest {
|
||||
// *********** assertions against unmodified target ***********
|
||||
final User targetUserWithACL = targetUserStore.getUserByName(NAME_OF_USER_TO_BE_DROPPED);
|
||||
assertNotNull(targetUserWithACL);
|
||||
final UserGroup targetUserWithACLTenant = targetUserStore.getUserGroupByName(NAME_OF_USER_TO_BE_DROPPED+SecurityService.TENANT_SUFFIX);
|
||||
assertNotNull(targetUserWithACLTenant);
|
||||
assertSame(targetUserWithACLTenant, targetUserWithACL.getDefaultTenant("unknown server name"));
|
||||
assertNull(targetUserWithACL.getDefaultTenant("ARCHIVE"));
|
||||
assertNull(targetUserStore.getUserGroupByName(NAME_OF_NEW_GROUP_WITH_NEW_ACTIONS));
|
||||
final User targetAdmin = targetUserStore.getUserByName("admin");
|
||||
final UserGroup targetAdminTenant = targetUserStore.getUserGroupByName("admin"+SecurityService.TENANT_SUFFIX);
|
||||
@@ -55,10 +64,15 @@ public class TestACLMerge extends AbstractStoreMergeTest {
|
||||
// *********** assertions against unmodified source ***********
|
||||
final User sourceUserWithACL = sourceUserStore.getUserByName(NAME_OF_USER_TO_BE_DROPPED);
|
||||
assertNotNull(sourceUserWithACL);
|
||||
final UserGroup sourceUserWithACLTenant = sourceUserStore.getUserGroupByName(NAME_OF_USER_TO_BE_DROPPED+SecurityService.TENANT_SUFFIX);
|
||||
assertNotNull(sourceUserWithACLTenant);
|
||||
assertNotNull(sourceUserStore.getUserGroupByName(NAME_OF_NEW_GROUP_WITH_NEW_ACTIONS));
|
||||
final User sourceAdmin = sourceUserStore.getUserByName("admin");
|
||||
final UserGroup sourceAdminTenant = sourceUserStore.getUserGroupByName("admin"+SecurityService.TENANT_SUFFIX);
|
||||
assertNotNull(sourceAdmin);
|
||||
assertNotNull(sourceAdminTenant);
|
||||
assertSame(sourceAdminTenant, sourceUserWithACL.getDefaultTenant("unknown server name"));
|
||||
assertSame(sourceUserWithACLTenant, sourceUserWithACL.getDefaultTenant("ARCHIVE"));
|
||||
final UserGroup sourceNewGroup = sourceUserStore.getUserGroupByName(NAME_OF_NEW_GROUP_WITH_NEW_ACTIONS);
|
||||
assertNotNull(sourceNewGroup);
|
||||
final AccessControlList sourceUserWithAclACL = sourceAccessControlStore.getAccessControlList(sourceUserWithACL.getIdentifier()).getAnnotation();
|
||||
@@ -89,5 +103,9 @@ public class TestACLMerge extends AbstractStoreMergeTest {
|
||||
assertTrue(newTargetUserWithAclACL.getActionsByUserGroup().get(targetAdminTenant).contains("CHANGE_ACL"));
|
||||
assertTrue(newTargetUserWithAclACL.getActionsByUserGroup().get(targetNewGroup).contains("CHANGE_OWNERSHIP"));
|
||||
assertTrue(newTargetUserWithAclACL.getActionsByUserGroup().get(targetNewGroup).contains("!FORCE_OVERWRITE_PASSWORD"));
|
||||
// validate that default creation group/tenant is not touched in target for existing "unknown server name"
|
||||
// and merged for new "ARCHIVE" record:
|
||||
assertSame(targetUserWithACLTenant, newTargetUserWithACL.getDefaultTenant("unknown server name"));
|
||||
assertSame(targetUserWithACLTenant, newTargetUserWithACL.getDefaultTenant("ARCHIVE"));
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,3 +1,3 @@
|
||||
{"_id":{"$oid":"5e3196259d7cdfdd30a81fb0"},"NAME":"admin","EMAIL":"nobody@sapsailing.com","FULLNAME":null,"COMPANY":null,"LOCALE":"en","EMAIL_VALIDATED":false,"PASSWORD_RESET_SECRET":null,"VALIDATION_SECRET":"Omyf/8d2j36jN4V6KBlCO2GxKq1/ZC76wSHnMs55+U4=","ACCOUNTS":{"USERNAME_PASSWORD":{"NAME":"admin","SALTED_PW":"lGt9bnQoIXITrDdv9IO8WYO9ZnFM0CwpzLd6K8OrdJI=","SALT":{"$binary":"gwlPkqRshCMVCDrJ4kE8qA==","$type":"00"}}},"ROLE_IDS":[{"ID":{"$binary":"ZEQ9sUhRHa0uTk1uOXzEkA==","$type":"03"},"NAME":"user","QUALIFYING_TENANT_ID":{"$binary":"cUDL4JN1mQEn0NYku63Dng==","$type":"03"},"QUALIFYING_TENANT_NAME":"admin-tenant","QUALIFYING_USERNAME":null},{"ID":{"$binary":"XkMF1NHjd9x6/fZFcs6Zhg==","$type":"03"},"NAME":"admin","QUALIFYING_TENANT_ID":null,"QUALIFYING_TENANT_NAME":null,"QUALIFYING_USERNAME":null},{"ID":{"$binary":"ZEQ9sUhRHa0uTk1uOXzEkA==","$type":"03"},"NAME":"user","QUALIFYING_TENANT_ID":null,"QUALIFYING_TENANT_NAME":null,"QUALIFYING_USERNAME":"admin"},{"ID":{"$binary":"ZEQ9sUhRHa0uTk1uOXzEkA==","$type":"03"},"NAME":"user","QUALIFYING_TENANT_ID":{"$binary":"jUzROKBkqLugyJzLa2FKhw==","$type":"03"},"QUALIFYING_TENANT_NAME":"newGroup","QUALIFYING_USERNAME":null}],"PERMISSIONS":[],"DEFAULT_TENANT_IDS":[{"DEFAULT_TENANT_SERVER":"unknown server name","DEFAULT_TENANT_GROUP":{"$binary":"rkQlapLPQzXRwNwE/gZdtQ==","$type":"03"}}]}
|
||||
{"_id":{"$oid":"5e3196259d7cdfdd30a81fd7"},"NAME":"\u003call\u003e","EMAIL":null,"FULLNAME":null,"COMPANY":null,"LOCALE":null,"EMAIL_VALIDATED":false,"PASSWORD_RESET_SECRET":null,"VALIDATION_SECRET":null,"ACCOUNTS":{},"ROLE_IDS":[],"PERMISSIONS":["USER:CREATE"],"DEFAULT_TENANT_IDS":[]}
|
||||
{"_id":{"$oid":"5e3196809d7cdfdd30a82201"},"NAME":"userWithACL","EMAIL":"userWithACL@example.com","FULLNAME":null,"COMPANY":null,"LOCALE":null,"EMAIL_VALIDATED":false,"PASSWORD_RESET_SECRET":null,"VALIDATION_SECRET":null,"ACCOUNTS":{"USERNAME_PASSWORD":{"NAME":"userWithACL","SALTED_PW":"VNuGTOeNC/Z+Z95VZYgZ8X+iL/tnkbbRUmvSUWXr/Ao=","SALT":{"$binary":"ThN1R1jcCinrgV00gAzZng==","$type":"00"}}},"ROLE_IDS":[{"ID":{"$binary":"ZEQ9sUhRHa0uTk1uOXzEkA==","$type":"03"},"NAME":"user","QUALIFYING_TENANT_ID":{"$binary":"OE4uv4rXnLE+D6VqDYJfqA==","$type":"03"},"QUALIFYING_TENANT_NAME":"userWithACL-tenant","QUALIFYING_USERNAME":null},{"ID":{"$binary":"ZEQ9sUhRHa0uTk1uOXzEkA==","$type":"03"},"NAME":"user","QUALIFYING_TENANT_ID":null,"QUALIFYING_TENANT_NAME":null,"QUALIFYING_USERNAME":"userWithACL"}],"PERMISSIONS":[],"DEFAULT_TENANT_IDS":[{"DEFAULT_TENANT_SERVER":"unknown server name","DEFAULT_TENANT_GROUP":{"$binary":"OE4uv4rXnLE+D6VqDYJfqA==","$type":"03"}}]}
|
||||
{"_id":{"$oid":"5e3196809d7cdfdd30a82201"},"NAME":"userWithACL","EMAIL":"userWithACL@example.com","FULLNAME":null,"COMPANY":null,"LOCALE":null,"EMAIL_VALIDATED":false,"PASSWORD_RESET_SECRET":null,"VALIDATION_SECRET":null,"ACCOUNTS":{"USERNAME_PASSWORD":{"NAME":"userWithACL","SALTED_PW":"VNuGTOeNC/Z+Z95VZYgZ8X+iL/tnkbbRUmvSUWXr/Ao=","SALT":{"$binary":"ThN1R1jcCinrgV00gAzZng==","$type":"00"}}},"ROLE_IDS":[{"ID":{"$binary":"ZEQ9sUhRHa0uTk1uOXzEkA==","$type":"03"},"NAME":"user","QUALIFYING_TENANT_ID":{"$binary":"OE4uv4rXnLE+D6VqDYJfqA==","$type":"03"},"QUALIFYING_TENANT_NAME":"userWithACL-tenant","QUALIFYING_USERNAME":null},{"ID":{"$binary":"ZEQ9sUhRHa0uTk1uOXzEkA==","$type":"03"},"NAME":"user","QUALIFYING_TENANT_ID":null,"QUALIFYING_TENANT_NAME":null,"QUALIFYING_USERNAME":"userWithACL"}],"PERMISSIONS":[],"DEFAULT_TENANT_IDS":[{"DEFAULT_TENANT_SERVER":"unknown server name","DEFAULT_TENANT_GROUP":{"$binary":"cUDL4JN1mQEn0NYku63Dng==","$type":"03"}},{"DEFAULT_TENANT_SERVER":"ARCHIVE","DEFAULT_TENANT_GROUP":{"$binary":"OE4uv4rXnLE+D6VqDYJfqA==","$type":"03"}}]}
|
||||
|
||||
+20
-2
@@ -343,7 +343,7 @@ public class SecurityStoreMerger {
|
||||
// places the existing user into the target user store
|
||||
targetUserStore.addUser(targetUser);
|
||||
} else {
|
||||
mergeSecondUserIntoFirst(targetUser, sourceUser);
|
||||
mergeSecondUserIntoFirst(targetUser, sourceUser, userGroupMap);
|
||||
}
|
||||
} // else drop
|
||||
}
|
||||
@@ -371,7 +371,7 @@ public class SecurityStoreMerger {
|
||||
}
|
||||
}
|
||||
|
||||
private void mergeSecondUserIntoFirst(User targetUser, User sourceUser) throws UserManagementException {
|
||||
private void mergeSecondUserIntoFirst(User targetUser, User sourceUser, Map<UserGroup, UserGroup> userGroupMap) throws UserManagementException {
|
||||
assert Util.equalsWithNull(targetUser.getEmail(), sourceUser.getEmail());
|
||||
for (final Role role : sourceUser.getRoles()) {
|
||||
if (role.getQualifiedForTenant() == null && role.getQualifiedForUser() == null) {
|
||||
@@ -413,11 +413,29 @@ public class SecurityStoreMerger {
|
||||
updated = copyNonNullValue(sourceUser.getCompany(), targetUser.getCompany(), targetUser::setCompany);
|
||||
updated = copyNonNullValue(sourceUser.getFullName(), targetUser.getFullName(), targetUser::setFullName);
|
||||
updated = copyNonNullValue(sourceUser.getLocale(), targetUser.getLocale(), targetUser::setLocale);
|
||||
updated = mergeDefaultCreationGroups(targetUser, sourceUser, userGroupMap) || updated;
|
||||
if (updated) {
|
||||
targetUserStore.updateUser(targetUser);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean mergeDefaultCreationGroups(User targetUser, User sourceUser, Map<UserGroup, UserGroup> userGroupMap) {
|
||||
boolean updated = false;
|
||||
for (final Entry<String, UserGroup> e : sourceUser.getDefaultTenantMap().entrySet()) {
|
||||
if (targetUser.getDefaultTenant(e.getKey()) == null) {
|
||||
final UserGroup mappedDefaultCreationGroup = userGroupMap.get(e.getValue());
|
||||
if (mappedDefaultCreationGroup != null) {
|
||||
targetUser.setDefaultTenant(mappedDefaultCreationGroup, e.getKey());
|
||||
updated = true;
|
||||
} else {
|
||||
logger.warning("Default creation group "+e.getValue().getName()+" for user "+targetUser.getName()+
|
||||
" on server "+e.getKey()+" not merged because that groups was dropped.");
|
||||
}
|
||||
}
|
||||
}
|
||||
return updated;
|
||||
}
|
||||
|
||||
/**
|
||||
* If the {@code sourceValue} is a non-{@code null} value, and {@code targetValue} is a {@code null}
|
||||
* value, the {@code setterOnTargetUser} is used to copy the {@code sourceValue} to the target user.
|
||||
|
||||
Reference in New Issue
Block a user