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:53 UTC
[isis] 01/01: ISIS-2764: makes stop impersonating available always
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;
}