You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/06/29 06:01:55 UTC
[isis] 06/06: ISIS-2733: suppress default UserMenu me action if
secman is configured
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch ISIS-2733
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 0b443524254177c376fc4dc2de160ad0ddb232bc
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jun 29 06:52:59 2021 +0100
ISIS-2733: suppress default UserMenu me action if secman is configured
---
.../apache/isis/core/config/IsisConfiguration.java | 19 ++++++++++++++++
.../secman/applib/IsisModuleExtSecmanApplib.java | 1 +
.../secman/applib/user/menu/MeService.java | 25 +++++++++++++++++++++-
3 files changed, 44 insertions(+), 1 deletion(-)
diff --git a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
index 01a06e5..574e872 100644
--- a/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
+++ b/core/config/src/main/java/org/apache/isis/core/config/IsisConfiguration.java
@@ -67,6 +67,7 @@ import org.apache.isis.applib.services.publishing.spi.EntityChangesSubscriber;
import org.apache.isis.applib.services.publishing.spi.EntityPropertyChangeSubscriber;
import org.apache.isis.applib.services.userreg.EmailNotificationService;
import org.apache.isis.applib.services.userreg.UserRegistrationService;
+import org.apache.isis.applib.services.userui.UserMenu;
import org.apache.isis.commons.internal.context._Context;
import org.apache.isis.core.config.metamodel.facets.DefaultViewConfiguration;
import org.apache.isis.core.config.metamodel.facets.EditingObjectsConfiguration;
@@ -3352,6 +3353,24 @@ public class IsisConfiguration {
*/
private final List<String> initialRoleNames = new ArrayList<>();
}
+
+ public enum UserMenuMeActionPolicy {
+ HIDE,
+ DISABLE,
+ ENABLE
+ }
+
+ /**
+ * Whether the presence of SecMan should result in the automatic suppression of the {@link org.apache.isis.applib.services.userui.UserMenu}'s
+ * {@link UserMenu#me() me} action.
+ *
+ * <p>
+ * This is normally what is required as SecMan's <code>ApplicationUser</code> is a more comprehensive
+ * representation of the current user. If the default {@link UserMenu#me() me} action is not
+ * suppressed, then the end-user will see two actions with the name "me" in the tertiary menu.
+ * </p>
+ */
+ private UserMenuMeActionPolicy userMenuMeActionPolicy = UserMenuMeActionPolicy.HIDE;
}
}
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
index 8cf0dbc..c26d878 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java
@@ -91,6 +91,7 @@ import org.apache.isis.extensions.secman.applib.user.menu.MeService;
ApplicationUserMenu.class,
MeService.class,
+ MeService.UserMenuMeActionAdvisor.class,
// -- ViewModels
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/menu/MeService.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/menu/MeService.java
index 8b3ad05..7629a72 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/menu/MeService.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/user/menu/MeService.java
@@ -20,9 +20,11 @@ package org.apache.isis.extensions.secman.applib.user.menu;
import java.util.concurrent.Callable;
-import javax.annotation.Priority;
import javax.inject.Inject;
+import org.springframework.context.event.EventListener;
+import org.springframework.stereotype.Component;
+
import org.apache.isis.applib.annotation.Action;
import org.apache.isis.applib.annotation.ActionLayout;
import org.apache.isis.applib.annotation.DomainService;
@@ -32,6 +34,8 @@ import org.apache.isis.applib.annotation.PriorityPrecedence;
import org.apache.isis.applib.annotation.SemanticsOf;
import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
import org.apache.isis.applib.services.user.UserService;
+import org.apache.isis.applib.services.userui.UserMenu;
+import org.apache.isis.core.config.IsisConfiguration;
import org.apache.isis.extensions.secman.applib.IsisModuleExtSecmanApplib;
import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUser;
import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUserRepository;
@@ -100,6 +104,25 @@ public class MeService {
}
+ @Component
+ @RequiredArgsConstructor(onConstructor_ = {@Inject})
+ public static class UserMenuMeActionAdvisor {
+
+ final IsisConfiguration isisConfiguration;
+ @EventListener(UserMenu.MeDomainEvent.class)
+ public void on(UserMenu.MeDomainEvent event) {
+ switch (isisConfiguration.getExtensions().getSecman().getUserMenuMeActionPolicy()) {
+ case HIDE:
+ event.hide();
+ break;
+ case DISABLE:
+ event.disable("Use security manager's action to view the current user");
+ break;
+ case ENABLE:
+ break;
+ }
+ }
+ }
}