You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/12/04 16:03:55 UTC

[isis] branch master updated: ISIS-2464: further simplify AuthenticationSession

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

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new 77e9574  ISIS-2464: further simplify AuthenticationSession
77e9574 is described below

commit 77e95742ac7ab292976ba82fd6784269c06463b5
Author: Andi Huber <ah...@apache.org>
AuthorDate: Fri Dec 4 17:03:42 2020 +0100

    ISIS-2464: further simplify AuthenticationSession
---
 .../isis/applib/services/user/UserMemento.java     |  5 ++++-
 .../authentication/AuthenticationSession.java      | 18 ++++++----------
 .../AuthenticationSessionAbstract.java             | 24 ++++------------------
 .../manager/AuthenticationManager.java             |  2 +-
 .../manager/AuthorizationManager.java              | 16 +++++++--------
 5 files changed, 23 insertions(+), 42 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
index 9157973..9cf0bd8 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserMemento.java
@@ -140,6 +140,10 @@ public final class UserMemento implements Serializable {
         return roles.stream()
                 .map(RoleMemento::getName);
     }
+    
+    public boolean hasRoleName(final @NonNull String roleName) {
+        return streamRoleNames().anyMatch(myRoleName->myRoleName.equals(roleName));
+    }
 
     // -- TO STRING, EQUALS, HASHCODE
     
@@ -180,7 +184,6 @@ public final class UserMemento implements Serializable {
     public int hashCode() {
         return getName().hashCode(); // its good enough to hash on just the user's name
     }
-        
     
     // tag::refguide[]
 
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSession.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSession.java
index daa7787..92d2f37 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSession.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSession.java
@@ -24,24 +24,18 @@ import java.io.Serializable;
 import org.apache.isis.applib.services.iactn.ExecutionContext;
 import org.apache.isis.applib.services.iactn.Interaction;
 import org.apache.isis.applib.services.user.UserMemento;
-import org.apache.isis.commons.collections.Can;
 
 /**
  * The representation within the system of an authenticated user.
  */
 public interface AuthenticationSession extends Serializable {
 
-    /**
-     * The name of the authenticated user; for display purposes only.
-     */
-    String getUserName();
-
-    boolean hasUserNameOf(String userName);
-
-    /**
-     * The roles this user belongs to
-     */
-    Can<String> getRoles();
+//    /**
+//     * The name of the authenticated user; for display purposes only.
+//     */
+    default String getUserName() {
+        return getUser().getName();
+    }
 
     /**
      * A unique code given to this session during authentication.
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSessionAbstract.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSessionAbstract.java
index feb5d49..254fb91 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSessionAbstract.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/AuthenticationSessionAbstract.java
@@ -22,9 +22,7 @@ import java.io.Serializable;
 import java.util.Objects;
 
 import org.apache.isis.applib.services.iactn.ExecutionContext;
-import org.apache.isis.applib.services.user.RoleMemento;
 import org.apache.isis.applib.util.ToString;
-import org.apache.isis.commons.collections.Can;
 
 import lombok.Getter;
 import lombok.NonNull;
@@ -41,12 +39,6 @@ implements AuthenticationSession, Serializable {
     @Getter(onMethod_ = {@Override})  
     private final @NonNull ExecutionContext executionContext;
     
-    @Getter(onMethod_ = {@Override}) 
-    private final @NonNull String userName;
-    
-    @Getter(onMethod_ = {@Override})
-    private final @NonNull Can<String> roles;
-    
     @Getter(onMethod_ = {@Override})
     private final @NonNull String validationCode;
 
@@ -58,22 +50,11 @@ implements AuthenticationSession, Serializable {
             @NonNull final String validationCode) {
 
         this.executionContext = executionEnvironment;
-        this.userName = getUser().getName();
-        this.roles = Can.ofCollection(getUser().getRoles())
-                .map(RoleMemento::getName);
-
         this.validationCode = validationCode;
         this.messageBroker = new MessageBroker();
         // nothing to do
     }
 
-    // -- User Name
-
-    @Override
-    public boolean hasUserNameOf(final String userName) {
-        return Objects.equals(userName, getUserName());
-    }
-
     // -- TO STRING, EQUALS, HASHCODE
 
     private static final ToString<AuthenticationSessionAbstract> toString = ToString
@@ -100,7 +81,10 @@ implements AuthenticationSession, Serializable {
     }
 
     private boolean isEqualsTo(final AuthenticationSessionAbstract other) {
-        if(!getExecutionContext().equals(other.getExecutionContext())) {
+        if(!Objects.equals(this.getValidationCode(), other.getValidationCode())) {
+            return false;
+        }
+        if(!Objects.equals(this.getExecutionContext(), other.getExecutionContext())) {
             return false;
         }
         return true;
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authentication/manager/AuthenticationManager.java b/core/security/src/main/java/org/apache/isis/core/security/authentication/manager/AuthenticationManager.java
index ad025d2..9eb28fa 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authentication/manager/AuthenticationManager.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authentication/manager/AuthenticationManager.java
@@ -125,7 +125,7 @@ public class AuthenticationManager {
             }
         }
         final String userName = userByValidationCode.get(session.getValidationCode());
-        return session.hasUserNameOf(userName);
+        return session.getUser().isCurrentUser(userName);
     }
 
 
diff --git a/core/security/src/main/java/org/apache/isis/core/security/authorization/manager/AuthorizationManager.java b/core/security/src/main/java/org/apache/isis/core/security/authorization/manager/AuthorizationManager.java
index 89e8f71..429b790 100644
--- a/core/security/src/main/java/org/apache/isis/core/security/authorization/manager/AuthorizationManager.java
+++ b/core/security/src/main/java/org/apache/isis/core/security/authorization/manager/AuthorizationManager.java
@@ -103,21 +103,21 @@ public class AuthorizationManager {
 
     // -- HELPER
     
-    private static boolean containsSudoSuperuserRole(@Nullable final AuthenticationSession session) {
-        if(session==null) {
+    private static boolean containsSudoSuperuserRole(
+            final @Nullable AuthenticationSession session) {
+        if(session==null || session.getUser()==null) {
             return false;
         }
-        return session.getRoles().contains(SudoService.ACCESS_ALL_ROLE.getName());
+        return session.getUser().hasRoleName(SudoService.ACCESS_ALL_ROLE.getName());
     }
     
     private boolean anyMatchOnRoles(
-            @Nullable final AuthenticationSession session, 
-            @NonNull final Predicate<String> predicate) {
-        if(session==null) {
+            final @Nullable AuthenticationSession session, 
+            final @NonNull Predicate<String> predicate) {
+        if(session==null || session.getUser()==null) {
             return false;
         }
-        return session.getRoles()
-                .stream()
+        return session.getUser().streamRoleNames()
                 .anyMatch(predicate);
     }