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 05:56:15 UTC

[isis] 10/10: ISIS-2773: 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-2779
in repository https://gitbox.apache.org/repos/asf/isis.git

commit ea26ae5c0c191c4ede5e20682013ad326901c900
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jun 29 06:52:59 2021 +0100

    ISIS-2773: 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 &quot;me&quot; 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;
+            }
+        }
+    }
 
 }