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 2019/07/17 10:38:00 UTC
[isis] branch v2 updated: ISIS-2151 fixes seeding of the security
module
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch v2
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/v2 by this push:
new 69ba774 ISIS-2151 fixes seeding of the security module
69ba774 is described below
commit 69ba7746562a96191f45eda6eb190fd238fac223
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Jul 17 12:37:54 2019 +0200
ISIS-2151 fixes seeding of the security module
- brings the security module to life with the demo-app
---
.../domainapp/application/DemoAppManifest.java | 8 +++
.../permission/ApplicationPermissionValueSet.java | 20 +++---
.../permission/PermissionsEvaluationService.java | 4 --
.../PermissionsEvaluationServiceAbstract.java | 14 +++--
...PermissionsEvaluationServiceAllowBeatsVeto.java | 3 +-
...PermissionsEvaluationServiceVetoBeatsAllow.java | 9 ++-
extensions/secman/encryption-jbcrypt/pom.xml | 1 -
.../secman/jdo/seed/SeedSecurityModuleService.java | 72 ++++------------------
8 files changed, 44 insertions(+), 87 deletions(-)
diff --git a/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java b/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
index 6227bd2..4d57f22 100644
--- a/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
+++ b/examples/apps/demo/src/main/java/domainapp/application/DemoAppManifest.java
@@ -25,6 +25,8 @@ import org.apache.isis.config.beans.IsisBeanScanInterceptorForSpring;
import org.apache.isis.config.beans.WebAppConfigBean;
import org.apache.isis.extensions.fixtures.IsisBootFixtures;
import org.apache.isis.extensions.secman.api.SecurityModuleConfig;
+import org.apache.isis.extensions.secman.api.permission.PermissionsEvaluationService;
+import org.apache.isis.extensions.secman.api.permission.PermissionsEvaluationServiceAllowBeatsVeto;
import org.apache.isis.extensions.secman.encryption.jbcrypt.IsisBootSecmanEncryptionJbcrypt;
import org.apache.isis.extensions.secman.jdo.IsisBootSecmanPersistenceJdo;
import org.apache.isis.extensions.secman.model.IsisBootSecmanModel;
@@ -95,5 +97,11 @@ public class DemoAppManifest {
return SecurityModuleConfig.builder()
.build();
}
+
+ @Bean @Singleton
+ public PermissionsEvaluationService permissionsEvaluationService() {
+ return new PermissionsEvaluationServiceAllowBeatsVeto();
+ }
+
}
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
index a9cae93..fcd6449 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermissionValueSet.java
@@ -19,7 +19,6 @@
package org.apache.isis.extensions.secman.api.permission;
import java.io.Serializable;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
@@ -97,26 +96,21 @@ public class ApplicationPermissionValueSet implements Serializable {
/**
* Note that we require PermissionsEvaluationService to be serializable.
*/
- private final PermissionsEvaluationService permissionsEvaluationService;
+ private PermissionsEvaluationService permissionsEvaluationService;
// -- constructor
- ApplicationPermissionValueSet(final ApplicationPermissionValue... permissionValues) {
- this(Arrays.asList(permissionValues));
- }
- public ApplicationPermissionValueSet(final Iterable<ApplicationPermissionValue> permissionValues) {
- this(permissionValues, null);
- }
- public ApplicationPermissionValueSet(final Iterable<ApplicationPermissionValue> permissionValues, final PermissionsEvaluationService permissionsEvaluationService) {
+
+ public ApplicationPermissionValueSet(
+ final List<ApplicationPermissionValue> permissionValues,
+ final PermissionsEvaluationService permissionsEvaluationService) {
+
this.values = Collections.unmodifiableList(_Lists.newArrayList(permissionValues));
for (final ApplicationPermissionValue permissionValue : permissionValues) {
final ApplicationFeatureId featureId = permissionValue.getFeatureId();
permissionsByFeature.putElement(featureId, permissionValue);
}
- this.permissionsEvaluationService =
- permissionsEvaluationService != null
- ? permissionsEvaluationService
- : PermissionsEvaluationService.DEFAULT;
+ this.permissionsEvaluationService = permissionsEvaluationService;
}
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
index 78824c2..2c84dd0 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationService.java
@@ -21,7 +21,6 @@ package org.apache.isis.extensions.secman.api.permission;
import java.io.Serializable;
import java.util.Collection;
-import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
/**
@@ -35,14 +34,11 @@ import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
*/
public interface PermissionsEvaluationService extends Serializable {
- PermissionsEvaluationService DEFAULT = new PermissionsEvaluationServiceAllowBeatsVeto ();
-
/**
* @param targetMemberId - the target (member) feature to be evaluated
* @param mode - the mode required, ie {@link org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode#VIEWING viewing} or {@link org.apache.isis.extensions.secman.api.permission.ApplicationPermissionMode#CHANGING changing}.
* @param permissionValues - permissions to evaluate, guaranteed to passed through in natural order, as per {@link org.apache.isis.extensions.secman.api.permission.ApplicationPermissionValue.Comparators#natural()}.
*/
- @Programmatic
ApplicationPermissionValueSet.Evaluation evaluate(
final ApplicationFeatureId targetMemberId,
final ApplicationPermissionMode mode,
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
index 1743ffc..f077d73 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAbstract.java
@@ -20,22 +20,25 @@ package org.apache.isis.extensions.secman.api.permission;
import java.util.Collection;
-import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.metamodel.services.appfeat.ApplicationFeatureId;
public abstract class PermissionsEvaluationServiceAbstract implements PermissionsEvaluationService {
private static final long serialVersionUID = 1L;
- @Programmatic
@Override
public ApplicationPermissionValueSet.Evaluation evaluate(
final ApplicationFeatureId targetMemberId,
final ApplicationPermissionMode mode,
final Collection<ApplicationPermissionValue> permissionValues) {
- final Iterable<ApplicationPermissionValue> ordered = ordered(permissionValues);
-
+ if(_NullSafe.isEmpty(permissionValues)) {
+ return null;
+ }
+
+ final Collection<ApplicationPermissionValue> ordered = ordered(permissionValues);
+
for (final ApplicationPermissionValue permissionValue : ordered) {
if(permissionValue.implies(targetMemberId, mode)) {
return new ApplicationPermissionValueSet.Evaluation(permissionValue, true);
@@ -46,6 +49,7 @@ public abstract class PermissionsEvaluationServiceAbstract implements Permission
return null;
}
- protected abstract Iterable<ApplicationPermissionValue> ordered(Collection<ApplicationPermissionValue> permissionValues);
+ protected abstract Collection<ApplicationPermissionValue> ordered(
+ Collection<ApplicationPermissionValue> permissionValues);
}
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
index a84c555..e6b2e05 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceAllowBeatsVeto.java
@@ -39,8 +39,9 @@ public class PermissionsEvaluationServiceAllowBeatsVeto extends PermissionsEvalu
* </p>
*/
@Override
- protected Iterable<ApplicationPermissionValue> ordered(
+ protected Collection<ApplicationPermissionValue> ordered(
final Collection<ApplicationPermissionValue> permissionValues) {
+
return permissionValues;
}
diff --git a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
index f22cf5e..def3b0e 100644
--- a/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
+++ b/extensions/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/PermissionsEvaluationServiceVetoBeatsAllow.java
@@ -18,12 +18,13 @@
*/
package org.apache.isis.extensions.secman.api.permission;
-import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import org.apache.isis.commons.internal.collections._Lists;
+import lombok.val;
+
/**
* An implementation whereby a VETO permission for a feature overrides an ALLOW (for same scope).
*/
@@ -43,8 +44,10 @@ public class PermissionsEvaluationServiceVetoBeatsAllow extends PermissionsEvalu
* </p>
*/
@Override
- protected Iterable<ApplicationPermissionValue> ordered(final Collection<ApplicationPermissionValue> permissionValues) {
- final ArrayList<ApplicationPermissionValue> reversed = _Lists.newArrayList(permissionValues);
+ protected Collection<ApplicationPermissionValue> ordered(
+ final Collection<ApplicationPermissionValue> permissionValues) {
+
+ val reversed = _Lists.<ApplicationPermissionValue>newArrayList(permissionValues);
Collections.reverse(reversed);
return reversed;
}
diff --git a/extensions/secman/encryption-jbcrypt/pom.xml b/extensions/secman/encryption-jbcrypt/pom.xml
index d0bec69..bc18294 100644
--- a/extensions/secman/encryption-jbcrypt/pom.xml
+++ b/extensions/secman/encryption-jbcrypt/pom.xml
@@ -57,7 +57,6 @@
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>${jbcrypt.version}</version>
- <scope>provided</scope>
</dependency>
</dependencies>
diff --git a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
index cb03ea4..c1e56c3 100644
--- a/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
+++ b/extensions/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/SeedSecurityModuleService.java
@@ -20,80 +20,32 @@ package org.apache.isis.extensions.secman.jdo.seed;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
+import javax.inject.Singleton;
-import org.apache.isis.applib.annotation.DomainService;
-import org.apache.isis.applib.annotation.NatureOfService;
-import org.apache.isis.commons.internal.base._NullSafe;
import org.apache.isis.extensions.fixtures.legacy.fixturescripts.FixtureScripts;
-import org.apache.isis.extensions.secman.jdo.dom.user.ApplicationUserRepository;
import org.apache.isis.runtime.system.context.IsisContext;
-import org.apache.isis.runtime.system.session.IsisSession;
-import org.apache.isis.runtime.system.session.IsisSessionFactory;
-import org.apache.isis.security.authentication.AuthenticationSession;
-import org.springframework.core.annotation.Order;
+import org.springframework.transaction.TransactionStatus;
-@DomainService(
- nature = NatureOfService.DOMAIN
-)
-@Order(-1000)
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+@Singleton @Log4j2
public class SeedSecurityModuleService {
@Inject FixtureScripts fixtureScripts;
@PostConstruct
public void init() {
+
+ log.info("SEED");
- // fixtureScripts.runFixtureScript(new SeedUsersAndRolesFixtureScript(), null);
-
- IsisContext.getAuthenticationSession()
- .ifPresent(authenticationSession->{
- System.out.println("!!! authenticationSession " + authenticationSession);
-
- IsisContext.compute(()->run(authenticationSession));
-
- });
-
- }
-
- private String run(AuthenticationSession authenticationSession) {
-
- System.out.println("!!! wait for SeedSecurityModule to start");
-
- try {
-
- Thread.sleep(5000);
-
- System.out.println("!!! SeedSecurityModule starting");
-
- final IsisSessionFactory sf = IsisContext.getSessionFactory();
- IsisSession session = sf.openSession(authenticationSession);
-
+ val txTemplate = IsisContext.createTransactionTemplate();
+
+ txTemplate.execute((TransactionStatus status) -> {
fixtureScripts.runFixtureScript(new SeedUsersAndRolesFixtureScript(), null);
-
- session.getCurrentTransaction().flush();
-
-
- } catch (Exception e) {
- e.printStackTrace();
-
- return "FAILED";
- }
-
- //verify
-
- final ApplicationUserRepository applicationUserRepository =
- IsisContext.getServiceRegistry()
- .lookupServiceElseFail(ApplicationUserRepository.class);
-
- _NullSafe.stream(applicationUserRepository.allUsers())
- .forEach(user->{
- System.out.println("!!! user: " + user + " : " + user.getEncryptedPassword());
+ return null;
});
- System.out.println("!!! SeedSecurityModule done");
-
- return "OK";
-
}