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/24 06:22:52 UTC

[isis] branch ISIS-2764 created (now 8ad6440)

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a change to branch ISIS-2764
in repository https://gitbox.apache.org/repos/asf/isis.git.


      at 8ad6440  ISIS-2764: makes stop impersonating available always

This branch includes the following new commits:

     new 8ad6440  ISIS-2764: makes stop impersonating available always

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


[isis] 01/01: ISIS-2764: makes stop impersonating available always

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2764
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 8ad64408832a0d92b2fd96b7a7832dba355db453
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Thu Jun 24 07:22:32 2021 +0100

    ISIS-2764: makes stop impersonating available always
---
 .../modules/fun/pages/ui/menubars-layout.adoc      |  2 +-
 .../org/apache/isis/applib/IsisModuleApplib.java   |  2 +
 .../isis/applib/services/user/ImpersonateMenu.java | 30 ---------
 .../applib/services/user/ImpersonateStopMenu.java  | 77 ++++++++++++++++++++++
 .../applib/mixins/Object_stopImpersonating.java    | 15 ++---
 5 files changed, 86 insertions(+), 40 deletions(-)

diff --git a/antora/components/userguide/modules/fun/pages/ui/menubars-layout.adoc b/antora/components/userguide/modules/fun/pages/ui/menubars-layout.adoc
index a164220..b0c773f 100644
--- a/antora/components/userguide/modules/fun/pages/ui/menubars-layout.adoc
+++ b/antora/components/userguide/modules/fun/pages/ui/menubars-layout.adoc
@@ -247,7 +247,7 @@ You can use `menubars.layout.xml` to arrange these as you see fit, though our re
             <mb3:named>Impersonate</mb3:named>
             <mb3:serviceAction objectType="isis.sudo.ImpersonateMenu" id="impersonate"/>
             <mb3:serviceAction objectType="isis.sudo.ImpersonateMenu" id="impersonateWithRoles"/>
-            <mb3:serviceAction objectType="isis.sudo.ImpersonateMenu" id="stopImpersonating"/>
+            <mb3:serviceAction objectType="isis.applib.ImpersonateStopMenu" id="stopImpersonating"/>
         </mb3:section>
         <mb3:section>
             <mb3:serviceAction objectType="isis.security.LogoutMenu" id="logout"/>
diff --git a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
index 7072ebf..9f0fd67 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
@@ -55,6 +55,7 @@ import org.apache.isis.applib.services.queryresultscache.QueryResultsCache;
 import org.apache.isis.applib.services.session.SessionLoggingServiceLogging;
 import org.apache.isis.applib.services.sudo.SudoService;
 import org.apache.isis.applib.services.user.ImpersonateMenu;
+import org.apache.isis.applib.services.user.ImpersonateStopMenu;
 import org.apache.isis.applib.services.user.RoleMemento;
 import org.apache.isis.applib.services.user.UserMemento;
 import org.apache.isis.applib.services.user.UserService;
@@ -100,6 +101,7 @@ import org.apache.isis.schema.IsisModuleSchema;
         ConfigurationMenu.class,
         LayoutServiceMenu.class,
         ImpersonateMenu.class,
+        ImpersonateStopMenu.class,
         MetaModelServiceMenu.class,
         QueryResultsCache.class,
         UserService.class,
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateMenu.java
index 82b2141..360fe3a 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateMenu.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateMenu.java
@@ -10,21 +10,15 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
 import org.apache.isis.applib.annotation.DomainServiceLayout;
-import org.apache.isis.applib.annotation.LabelPosition;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.applib.annotation.Parameter;
-import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.PriorityPrecedence;
 import org.apache.isis.applib.annotation.Publishing;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.applib.annotation.Value;
 import org.apache.isis.applib.services.message.MessageService;
 
 import lombok.RequiredArgsConstructor;
-import lombok.val;
-import lombok.experimental.Accessors;
 
 /**
  * Provides the UI to allow a current user to be impersonated.
@@ -150,28 +144,4 @@ public class ImpersonateMenu {
     }
 
 
-
-
-
-    public static class StopImpersonatingDomainEvent extends ActionDomainEvent { }
-
-    @Action(
-            domainEvent = ImpersonateMenu.StopImpersonatingDomainEvent.class,
-            semantics = SemanticsOf.IDEMPOTENT,
-            commandPublishing = Publishing.DISABLED,
-            executionPublishing = Publishing.DISABLED,
-            restrictTo = RestrictTo.PROTOTYPING
-    )
-    @ActionLayout(sequence = "100.3")
-    public void stopImpersonating() {
-        this.userService.stopImpersonating();
-        this.messageService.informUser("No longer impersonating another user");
-    }
-    public boolean hideStopImpersonating() {
-        return ! this.userService.supportsImpersonation();
-    }
-    public String disableStopImpersonating() {
-        return ! this.userService.isImpersonating() ? "no user is currently being impersonated": null;
-    }
-
 }
diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateStopMenu.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateStopMenu.java
new file mode 100644
index 0000000..f963b00
--- /dev/null
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/ImpersonateStopMenu.java
@@ -0,0 +1,77 @@
+package org.apache.isis.applib.services.user;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.ActionLayout;
+import org.apache.isis.applib.annotation.DomainService;
+import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.annotation.NatureOfService;
+import org.apache.isis.applib.annotation.PriorityPrecedence;
+import org.apache.isis.applib.annotation.Publishing;
+import org.apache.isis.applib.annotation.RestrictTo;
+import org.apache.isis.applib.annotation.SemanticsOf;
+import org.apache.isis.applib.services.message.MessageService;
+
+import lombok.RequiredArgsConstructor;
+
+/**
+ * Provides the UI to allow a current user to be impersonated.
+ *
+ * <p>
+ *     All of the actions provided here are restricted to PROTOTYPE mode only;
+ *     this feature is <i>not</i> intended for production use as it would imply
+ *     a large security hole !
+ * </p>
+ *
+ * @see UserService
+ * @see ImpersonateMenuAdvisor
+ * @see ImpersonatedUserHolder
+ *
+ * @since 2.0 {@index}
+ */
+@DomainService(
+        nature = NatureOfService.VIEW,
+        logicalTypeName = ImpersonateStopMenu.LOGICAL_TYPE_NAME
+)
+@DomainServiceLayout(
+        named = "Security",
+        menuBar = DomainServiceLayout.MenuBar.TERTIARY
+)
+@javax.annotation.Priority(PriorityPrecedence.EARLY)
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
+public class ImpersonateStopMenu {
+
+    public static final String LOGICAL_TYPE_NAME = IsisModuleApplib.NAMESPACE + ".ImpersonateStopMenu";   // deliberately IS part of isis.applib
+
+    final UserService userService;
+    final MessageService messageService;
+
+
+    public static abstract class ActionDomainEvent extends IsisModuleApplib.ActionDomainEvent<ImpersonateStopMenu> {}
+
+
+    public static class StopImpersonatingDomainEvent extends ActionDomainEvent { }
+
+    @Action(
+            domainEvent = ImpersonateStopMenu.StopImpersonatingDomainEvent.class,
+            semantics = SemanticsOf.IDEMPOTENT,
+            commandPublishing = Publishing.DISABLED,
+            executionPublishing = Publishing.DISABLED,
+            restrictTo = RestrictTo.PROTOTYPING
+    )
+    @ActionLayout(sequence = "100.3")
+    public void stopImpersonating() {
+        this.userService.stopImpersonating();
+        this.messageService.informUser("No longer impersonating another user");
+    }
+    public boolean hideStopImpersonating() {
+        return ! isImpersonating();
+    }
+
+    private boolean isImpersonating() {
+        return this.userService.supportsImpersonation() && this.userService.isImpersonating();
+    }
+
+}
diff --git a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_stopImpersonating.java b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_stopImpersonating.java
index 3eeb664..b993da6 100644
--- a/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_stopImpersonating.java
+++ b/viewers/common/src/main/java/org/apache/isis/viewer/common/applib/mixins/Object_stopImpersonating.java
@@ -28,12 +28,12 @@ import org.apache.isis.applib.annotation.Redirect;
 import org.apache.isis.applib.annotation.RestrictTo;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.mixins.layout.LayoutMixinConstants;
-import org.apache.isis.applib.services.user.ImpersonateMenu;
+import org.apache.isis.applib.services.user.ImpersonateStopMenu;
 
 import lombok.RequiredArgsConstructor;
 
 /**
- * Same as {@link ImpersonateMenu#stopImpersonating()},
+ * Same as {@link ImpersonateStopMenu#stopImpersonating()},
  * but implemented as a mixin so that can be invoked while accessing an object.
  *
  * @since 2.0 {@index}
@@ -61,18 +61,15 @@ public class Object_stopImpersonating {
     private final Object holder;
 
     public Object act() {
-        impersonateMenu.stopImpersonating();
+        impersonateStopMenu.stopImpersonating();
         return holder;
     }
 
     @MemberSupport public boolean hideAct() {
-        return impersonateMenu.hideStopImpersonating();
+        return impersonateStopMenu.hideStopImpersonating();
     }
-    @MemberSupport public String disableAct() {
-        return impersonateMenu.disableStopImpersonating();
 
-    }
-
-    @Inject ImpersonateMenu impersonateMenu;
+    @Inject
+    ImpersonateStopMenu impersonateStopMenu;
 
 }