You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/10/01 14:35:41 UTC
[causeway] 01/01: CAUSEWAY-3517: adds special case logic to always allow logout
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3517
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit e653d831dc0733ec93e4f70cf6c7c5ee19d0e723
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sun Oct 1 15:35:31 2023 +0100
CAUSEWAY-3517: adds special case logic to always allow logout
to be visible and usable
---
.../integration/authorizor/AuthorizorSecman.java | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authorizor/AuthorizorSecman.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authorizor/AuthorizorSecman.java
index 0483d46bb6..65d1ab4159 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authorizor/AuthorizorSecman.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/authorizor/AuthorizorSecman.java
@@ -26,6 +26,11 @@ import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
+import org.apache.causeway.applib.id.LogicalType;
+import org.apache.causeway.applib.services.metamodel.MetaModelService;
+import org.apache.causeway.commons.internal.base._Lazy;
+import org.apache.causeway.core.security.authentication.logout.LogoutMenu;
+
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@@ -69,14 +74,28 @@ public class AuthorizorSecman implements Authorizor {
@Inject ApplicationUserRepository applicationUserRepository;
@Inject Provider<PermissionCache> cache;
+ @Inject MetaModelService metaModelService;
+
+ private _Lazy<Identifier> logoutIdentifier = _Lazy.of(this::logoutIdentifier);
+
+ private Identifier logoutIdentifier() {
+ return Identifier.actionIdentifier(metaModelService.lookupLogicalTypeByClass(LogoutMenu.class).orElseThrow(), "logout");
+ }
@Override
public boolean isVisible(final InteractionContext authentication, final Identifier identifier) {
+ if (this.logoutIdentifier.get().equals(identifier)) {
+ return true;
+ }
return grants(authentication, identifier, ApplicationPermissionMode.VIEWING);
}
+
@Override
public boolean isUsable(final InteractionContext authentication, final Identifier identifier) {
+ if (this.logoutIdentifier.get().equals(identifier)) {
+ return true;
+ }
return grants(authentication, identifier, ApplicationPermissionMode.CHANGING);
}