From d19bd2a7f3ed6697bd23d4fc4aa5d1bfced175da Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Thu, 13 Feb 2020 18:41:31 +0100 Subject: [PATCH] "migrate" SERVER object also after receiving initial load, ensuring that a newly created server group is used for the SERVER object's group ownership --- .../ui/adminconsole/LocalServerManagementPanel.java | 2 -- .../com/sap/sse/security/ui/client/UserService.java | 1 - .../src/com/sap/sse/security/SecurityService.java | 7 +++++++ .../src/com/sap/sse/security/impl/Activator.java | 5 +---- .../com/sap/sse/security/impl/SecurityServiceImpl.java | 10 ++++++++++ 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LocalServerManagementPanel.java b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LocalServerManagementPanel.java index 9ebea4f1f7e..02edf7d669e 100644 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LocalServerManagementPanel.java +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/LocalServerManagementPanel.java @@ -161,7 +161,6 @@ public class LocalServerManagementPanel extends SimplePanel { final boolean hasUserOwner = ownership != null && ownership.getUserOwner() != null; groupOwnerInfo.setText(hasGroupOwner ? ownership.getTenantOwner().getName() : "---"); userOwnerInfo.setText(hasUserOwner ? ownership.getUserOwner().getName() : "---"); - // Update changeability isSelfServiceServerCheckbox.setEnabled(userService.hasCurrentUserMetaPermission( serverInfo.getIdentifier().getPermission(ServerActions.CREATE_OBJECT), serverInfo.getOwnership())); @@ -172,7 +171,6 @@ public class LocalServerManagementPanel extends SimplePanel { private void updateServerConfiguration(ServerConfigurationDTO result) { isStandaloneServerCheckbox.setValue(result.isStandaloneServer(), false); isStandaloneServerCheckbox.setEnabled(true); - isPublicServerCheckbox.setValue(result.isPublic(), false); isSelfServiceServerCheckbox.setValue(result.isSelfService(), false); } diff --git a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java index 553b41ee4c0..972529d2ecd 100644 --- a/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java +++ b/java/com.sap.sse.security.ui/src/main/java/com/sap/sse/security/ui/client/UserService.java @@ -271,7 +271,6 @@ public class UserService { } anonymousUser = resultAndAnomynous.getB(); serverInfo = resultAndAnomynous.getC(); - preAuthenticated = (!userInitiallyLoaded && currentUser != null); userInitiallyLoaded = true; logger.info("User changed to " diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java index 2a3ea204a7a..a4a8334fc59 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/SecurityService.java @@ -535,6 +535,13 @@ public interface SecurityService extends ReplicableWithObjectInputStream permissionReplacement); + /** + * If the {@link SecuredSecurityTypes#SERVER} object has a group ownership. If not, it is set to the + * {@link #getServerGroup() server group}. The {@link SecuredSecurityTypes#SERVER} type is then marked + * as migrated (see {@link #checkMigration(Iterable)}). + */ + void migrateServerObject(); + void checkMigration(Iterable allInstances); boolean hasCurrentUserRoleForOwnedObject(HasPermissions type, T object, diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java b/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java index 1c46ea379ad..2ff62716959 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/impl/Activator.java @@ -280,10 +280,7 @@ public class Activator implements BundleActivator { } } } - final QualifiedObjectIdentifier serverIdentifier = SecuredSecurityTypes.SERVER - .getQualifiedObjectIdentifier( - new TypeRelativeObjectIdentifier(ServerInfo.getName())); - securityService.migrateOwnership(serverIdentifier, serverIdentifier.toString()); + securityService.migrateServerObject(); securityService.checkMigration(SecuredSecurityTypes.getAllInstances()); } diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java b/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java index be20908a271..d3f082d3d56 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/impl/SecurityServiceImpl.java @@ -2105,6 +2105,8 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat } finally { Thread.currentThread().setContextClassLoader(oldCCL); } + // now ensure that the SERVER object has a valid ownership; use the (potentially new) server group as the default: + migrateServerObject(); logger.info("Reading isSharedAcrossSubdomains..."); sharedAcrossSubdomainsOf = (String) is.readObject(); logger.info("...as "+sharedAcrossSubdomainsOf); @@ -2251,6 +2253,14 @@ public class SecurityServiceImpl implements ReplicableSecurityService, ClearStat return wasNecessaryToMigrate; } + @Override + public void migrateServerObject() { + final QualifiedObjectIdentifier serverIdentifier = SecuredSecurityTypes.SERVER + .getQualifiedObjectIdentifier( + new TypeRelativeObjectIdentifier(ServerInfo.getName())); + migrateOwnership(serverIdentifier, serverIdentifier.toString()); + } + @Override public void checkMigration(Iterable allInstances) { Class clazz = Util.first(allInstances).getClass();