From d8427576c4dc3f07df33c34fb7c4e91ef1722f01 Mon Sep 17 00:00:00 2001 From: danhaywood Date: Sun, 1 Aug 2021 16:58:10 +0100 Subject: [PATCH 1/2] ISIS-2719: adds findByRoleNames (for permissions) and adds more sophisticated implementation of findByUser for JPA. --- .../permission/dom/ApplicationPermission.java | 1 + .../dom/ApplicationPermissionRepository.java | 22 ++++++++++++++--- ...plicationPermissionRepositoryAbstract.java | 24 +++++++++---------- .../permission/dom/ApplicationPermission.java | 5 ++++ .../permission/dom/ApplicationPermission.java | 13 ++++++---- .../dom/ApplicationPermissionRepository.java | 19 --------------- 6 files changed, 46 insertions(+), 38 deletions(-) diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermission.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermission.java index d26dd1fbd54..b93d5256495 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermission.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermission.java @@ -91,6 +91,7 @@ public abstract class ApplicationPermission implements Comparable findByUser(ApplicationUser applicationUser); List findByRole(ApplicationRole applicationRole); /** - * To support impersonation by role - * @param user - * @return + * Uses the {@link UserMemento#getRoles() roles} held within the provided {@link UserMemento}. + * + *

+ * Added to support {@link org.apache.isis.applib.services.user.ImpersonateMenu#impersonateWithRoles(String, List) impersonation by role}. + *

+ * + * @see #findByRoleNames(List) */ List findByUserMemento(UserMemento user); + + /** + * Returns the set of permissions associated with the provided list of roles (identified by + * their role name). + * + * @see #findByUserMemento(UserMemento). + */ + List findByRoleNames(List roleNames); + } diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java index a559bad656f..1addd95d1a6 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.List; import java.util.Optional; +import java.util.stream.Collectors; import javax.inject.Inject; @@ -97,19 +98,18 @@ public List findByUser(@NonNull final ApplicationUser use } public List findByUserMemento(@NonNull final UserMemento userMemento) { - val permissions = new ArrayList(); - - // TODO: this is naive in the extreme... - userMemento.getRoles().stream() + val roleNames = userMemento.getRoles().stream() .map(RoleMemento::getName) - .map(roleRepository::findByName) - .filter(Optional::isPresent) - .map(Optional::get) - .forEach(role -> { - final List byRole = findByRole(role); - permissions.addAll(byRole); - }); - return permissions; + .collect(Collectors.toList()); + return findByRoleNames(roleNames); + } + + public List findByRoleNames(@NonNull final List roleNames) { + return _Casts.uncheckedCast( + repository.allMatches( + Query.named(this.applicationPermissionClass, ApplicationPermission.NAMED_QUERY_FIND_BY_USER) + .withParameter("roleNames", roleNames)) + ); } private List findByUser(final String username) { diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java index 46496de0321..e9b15c05c75 100644 --- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java +++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermission.java @@ -65,6 +65,11 @@ + "FROM " + ApplicationPermission.FQCN + " WHERE (u.roles.contains(role) && u.username == :username) " + "VARIABLES org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser u"), + @Query( + name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_NAMES, + value = "SELECT " + + "FROM " + ApplicationPermission.FQCN + + " WHERE :roleNames.contains(role.name) "), @Query( name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_FEATURE, value = "SELECT " diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java index 27d66a14fcd..16fc5e1f977 100644 --- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java +++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java @@ -61,12 +61,17 @@ + " WHERE p.role = :role"), @NamedQuery( name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_USER, - //TODO this query returns empty result query = "SELECT p " + "FROM ApplicationPermission p " - + " , ApplicationUser u " - + "WHERE u.username = :username" - + " AND p.role MEMBER OF u.roles"), + + "INNER JOIN ApplicationRole r " + + "INNER JOIN ApplicationUser u " + + "WHERE u.username = :username"), + @NamedQuery( + name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_NAMES, + query = "SELECT p " + + "FROM ApplicationPermission p " + + "INNER JOIN ApplicationRole r " + + "WHERE r.name IN :roleNames"), @NamedQuery( name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_FEATURE, query = "SELECT p " diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository.java index 13bf8d07157..72d4dd97c40 100644 --- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository.java +++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository.java @@ -43,23 +43,4 @@ protected ApplicationPermissionRepository() { super(ApplicationPermission.class); } - // TODO NAMED_QUERY_FIND_BY_USER not working yet, using workaround ... - @Override - public List - findByUser(final @NonNull ApplicationUser user) { - final String username = user.getUsername(); - - return userRepository.findByUsername(username) - .map(ApplicationUser::getRoles) - .map(_NullSafe::stream) - .map(roleStream -> roleStream - .map(this::findByRole) - .flatMap(List::stream) - .map(org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.class::cast) - .collect(Collectors.toList())) - .orElse(Collections.emptyList()); - } - - @Inject private ApplicationUserRepository userRepository; - } From 21296cf0f64977db543fb4656d4527e2d2667e58 Mon Sep 17 00:00:00 2001 From: danhaywood Date: Sun, 1 Aug 2021 23:34:33 +0100 Subject: [PATCH 2/2] ISIS-2719: implements ApplicationPermissionRepository queries more effectively. Also ... ... rationalizes the IsisModulePersistence{Jdo/Jpa} module class names (adds in "Persistence" where necessary). ... makes the Secman Jdo/Jpa depend on the IsisModulePersistence Jdo/Jpa modules automatically ... corresponding updates to pom.xml's also: - tests the perm repos with new integ tests. --- .../applib/services/user/UserService.java | 10 +- .../apache/isis/applib/value/Password.java | 4 + .../main/java/demoapp/dom/DemoModuleJdo.java | 4 +- .../main/java/demoapp/dom/DemoModuleJpa.java | 4 +- extensions/security/secman/applib/pom.xml | 7 ++ .../applib/IsisModuleExtSecmanApplib.java | 4 + ...plicationPermissionRepositoryAbstract.java | 3 +- .../ApplicationPermission_updateRole.java | 2 +- .../role/dom/ApplicationRoleRepository.java | 2 - .../ApplicationRoleRepositoryAbstract.java | 1 + .../seed/SeedSecurityModuleService.java | 11 +-- ...PermissionRepositoryIntegTestAbstract.java | 95 +++++++++++++++++++ .../secman/applib/mmm/MmmModule.java | 19 ++++ .../applib/mmm/dom/ChaseCatsService.java | 10 ++ .../applib/mmm/dom/EatCheeseService.java | 10 ++ .../mmm/dom/PressLiftButtonService.java | 10 ++ .../applib/mmm/dom/RideLiftService.java | 10 ++ .../secman/persistence-jdo/log4j2-test.xml | 78 +++++++++++++++ .../security/secman/persistence-jdo/pom.xml | 25 +++-- .../IsisModuleExtSecmanPersistenceJdo.java | 4 +- ...icationPermissionRepository_IntegTest.java | 40 ++++++++ .../src/test/resources/application-test.yml | 29 ++++++ .../secman/persistence-jpa/log4j2-test.xml | 78 +++++++++++++++ .../security/secman/persistence-jpa/pom.xml | 18 +++- .../IsisModuleExtSecmanPersistenceJpa.java | 4 +- .../permission/dom/ApplicationPermission.java | 18 ++-- ...icationPermissionRepository_IntegTest.java | 40 ++++++++ .../src/test/resources/application-test.yml | 24 +++++ extensions/security/secman/pom.xml | 16 ++++ persistence/jdo/datanucleus/pom.xml | 6 +- ... IsisModulePersistenceJdoDatanucleus.java} | 6 +- ... IsisModulePersistenceJdoIntegration.java} | 6 +- ...=> IsisModulePersistenceJdoMetamodel.java} | 2 +- .../jdo/metamodel/menu/JdoMetamodelMenu.java | 4 +- ...va => IsisModulePersistenceJdoSpring.java} | 2 +- .../IsisModulePersistenceJpaApplib.java | 29 ++++++ ... IsisModulePersistenceJpaEclipselink.java} | 8 +- persistence/jpa/integration/pom.xml | 5 - ... IsisModulePersistenceJpaIntegration.java} | 5 +- ...=> IsisModulePersistenceJpaMetamodel.java} | 8 +- .../conf/Configuration_usingJdo.java | 4 +- .../conf/Configuration_usingJdoAndShiro.java | 4 +- .../conf/Configuration_usingJpa.java | 4 +- .../Configuration_usingSpringDataJpa.java | 4 +- 44 files changed, 597 insertions(+), 80 deletions(-) create mode 100644 extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/ApplicationPermissionRepositoryIntegTestAbstract.java create mode 100644 extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/MmmModule.java create mode 100644 extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/ChaseCatsService.java create mode 100644 extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/EatCheeseService.java create mode 100644 extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/PressLiftButtonService.java create mode 100644 extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/RideLiftService.java create mode 100644 extensions/security/secman/persistence-jdo/log4j2-test.xml create mode 100644 extensions/security/secman/persistence-jdo/src/test/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermissionRepository_IntegTest.java create mode 100644 extensions/security/secman/persistence-jdo/src/test/resources/application-test.yml create mode 100644 extensions/security/secman/persistence-jpa/log4j2-test.xml create mode 100644 extensions/security/secman/persistence-jpa/src/test/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository_IntegTest.java create mode 100644 extensions/security/secman/persistence-jpa/src/test/resources/application-test.yml rename persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/{IsisModuleJdoDatanucleus.java => IsisModulePersistenceJdoDatanucleus.java} (98%) rename persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/{IsisModuleJdoIntegration.java => IsisModulePersistenceJdoIntegration.java} (88%) rename persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/{IsisModuleJdoMetamodel.java => IsisModulePersistenceJdoMetamodel.java} (96%) rename persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/{IsisModuleJdoSpring.java => IsisModulePersistenceJdoSpring.java} (95%) create mode 100644 persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/IsisModulePersistenceJpaApplib.java rename persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/{IsisModuleJpaEclipselink.java => IsisModulePersistenceJpaEclipselink.java} (97%) rename persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/{IsisModuleJpaIntegration.java => IsisModulePersistenceJpaIntegration.java} (91%) rename persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/{IsisModuleJpaMetamodel.java => IsisModulePersistenceJpaMetamodel.java} (79%) diff --git a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java index 9e37265cbe0..e0316233fc1 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java +++ b/api/applib/src/main/java/org/apache/isis/applib/services/user/UserService.java @@ -25,14 +25,16 @@ import javax.annotation.Priority; import javax.inject.Inject; import javax.inject.Named; +import javax.inject.Provider; + +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.stereotype.Service; import org.apache.isis.applib.annotation.PriorityPrecedence; import org.apache.isis.applib.services.iactnlayer.InteractionContext; import org.apache.isis.applib.services.iactnlayer.InteractionLayerTracker; import org.apache.isis.applib.services.sudo.SudoService; import org.apache.isis.commons.internal.exceptions._Exceptions; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; import lombok.val; @@ -75,7 +77,7 @@ public class UserService { */ public static final String NOBODY = "__isis_nobody"; - private final InteractionLayerTracker iInteractionLayerTracker; + private final Provider iInteractionLayerTrackerProvider; private final List impersonatedUserHolders; @@ -88,7 +90,7 @@ public Optional currentUser() { val impersonatedUserIfAny = impersonatedUserIfAny(); return impersonatedUserIfAny.isPresent() ? impersonatedUserIfAny - : iInteractionLayerTracker.currentInteractionContext().map(InteractionContext::getUser); + : iInteractionLayerTrackerProvider.get().currentInteractionContext().map(InteractionContext::getUser); } /** diff --git a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java index 81746f15d06..a53c671cdc9 100644 --- a/api/applib/src/main/java/org/apache/isis/applib/value/Password.java +++ b/api/applib/src/main/java/org/apache/isis/applib/value/Password.java @@ -47,6 +47,10 @@ public class Password implements Serializable { private final String password; + public static Password of(final String password) { + return new Password(password); + } + // in support of XML un-marshaling @SuppressWarnings("unused") private Password() { diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJdo.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJdo.java index c394472b413..a57d43bbade 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJdo.java +++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJdo.java @@ -26,13 +26,13 @@ import org.apache.isis.core.config.presets.IsisPresets; import org.apache.isis.extensions.commandlog.jdo.IsisModuleExtCommandLogJdo; -import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus; +import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus; @Configuration @Profile("demo-jdo") @Import({ DemoModuleCommon.class, - IsisModuleJdoDatanucleus.class, + IsisModulePersistenceJdoDatanucleus.class, IsisModuleExtCommandLogJdo.class, }) @PropertySources({ diff --git a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java index cbccf064a80..851b6f129f0 100644 --- a/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java +++ b/examples/demo/domain/src/main/java/demoapp/dom/DemoModuleJpa.java @@ -24,7 +24,7 @@ import org.springframework.context.annotation.Profile; import org.apache.isis.extensions.commandlog.jpa.IsisModuleExtCommandLogJpa; -import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink; +import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink; import demoapp.dom.domain.actions.Action.commandPublishing.jpa.ActionCommandPublishingJpa; import demoapp.dom.domain.actions.Action.executionPublishing.jpa.ActionExecutionPublishingJpa; @@ -81,7 +81,7 @@ @Profile("demo-jpa") @Import({ DemoModuleCommon.class, - IsisModuleJpaEclipselink.class, + IsisModulePersistenceJpaEclipselink.class, IsisModuleExtCommandLogJpa.class, }) @EntityScan(basePackageClasses = { diff --git a/extensions/security/secman/applib/pom.xml b/extensions/security/secman/applib/pom.xml index 2f724d6b231..341c626145d 100644 --- a/extensions/security/secman/applib/pom.xml +++ b/extensions/security/secman/applib/pom.xml @@ -50,6 +50,13 @@ + + org.apache.isis.mavendeps + isis-mavendeps-integtests + pom + test + + diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java index c26d8782498..96aba8411ff 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/IsisModuleExtSecmanApplib.java @@ -75,12 +75,16 @@ import org.apache.isis.extensions.secman.applib.user.dom.mixins.perms.UserPermissionViewModel; import org.apache.isis.extensions.secman.applib.user.menu.ApplicationUserMenu; import org.apache.isis.extensions.secman.applib.user.menu.MeService; +import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib; /** * @since 2.0 {@index} */ @Configuration @Import({ + // modules + IsisModuleTestingFixturesApplib.class, + ApplicationFeatureChoices.class, // @DomainService diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java index 1addd95d1a6..df8bbfe29ba 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/ApplicationPermissionRepositoryAbstract.java @@ -18,7 +18,6 @@ */ package org.apache.isis.extensions.secman.applib.permission.dom; -import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Optional; @@ -107,7 +106,7 @@ public List findByUserMemento(@NonNull final UserMemento public List findByRoleNames(@NonNull final List roleNames) { return _Casts.uncheckedCast( repository.allMatches( - Query.named(this.applicationPermissionClass, ApplicationPermission.NAMED_QUERY_FIND_BY_USER) + Query.named(this.applicationPermissionClass, ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_NAMES) .withParameter("roleNames", roleNames)) ); } diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/mixins/ApplicationPermission_updateRole.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/mixins/ApplicationPermission_updateRole.java index db0fd6703b3..09f11cb0f78 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/mixins/ApplicationPermission_updateRole.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/permission/dom/mixins/ApplicationPermission_updateRole.java @@ -50,7 +50,7 @@ public class ApplicationPermission_updateRole { public static class DomainEvent extends IsisModuleExtSecmanApplib.ActionDomainEvent {} - @Inject private ApplicationRoleRepository applicationRoleRepository; + @Inject ApplicationRoleRepository applicationRoleRepository; private final ApplicationPermission target; diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepository.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepository.java index cb7008eddd3..dd052dc193f 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepository.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepository.java @@ -62,6 +62,4 @@ default ApplicationRole upsert(final String name, final String roleDescription) void deleteRole(ApplicationRole holder); - - } diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepositoryAbstract.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepositoryAbstract.java index 0a3671406e7..5ab94da59f9 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepositoryAbstract.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/role/dom/ApplicationRoleRepositoryAbstract.java @@ -178,4 +178,5 @@ public Collection getRoles( return user.getRoles(); } + } diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java index 30f0f60ab2d..6d912bbc906 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/seed/SeedSecurityModuleService.java @@ -27,10 +27,12 @@ import org.springframework.stereotype.Service; import org.apache.isis.applib.annotation.PriorityPrecedence; +import org.apache.isis.applib.services.iactnlayer.InteractionService; import org.apache.isis.core.metamodel.events.MetamodelEvent; import org.apache.isis.extensions.secman.applib.seed.scripts.SeedUsersAndRolesFixtureScript; import org.apache.isis.testing.fixtures.applib.fixturescripts.FixtureScripts; +import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; /** @@ -49,15 +51,12 @@ @Service @Named("isis.ext.secman.SeedSecurityModuleService") @Qualifier("Default") +@RequiredArgsConstructor(onConstructor_ = {@Inject }) @Log4j2 public class SeedSecurityModuleService { private final FixtureScripts fixtureScripts; - - @Inject - public SeedSecurityModuleService(final FixtureScripts fixtureScripts) { - this.fixtureScripts = fixtureScripts; - } + private final InteractionService interactionService; @EventListener(MetamodelEvent.class) @Order(PriorityPrecedence.MIDPOINT - 100) @@ -68,7 +67,7 @@ public void onMetamodelEvent(final MetamodelEvent event) { if (event.isPostMetamodel()) { log.info("SEED security fixtures (Users and Roles)"); - fixtureScripts.run(new SeedUsersAndRolesFixtureScript()); + interactionService.runAnonymous(() -> fixtureScripts.run(new SeedUsersAndRolesFixtureScript())); } } } diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/ApplicationPermissionRepositoryIntegTestAbstract.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/ApplicationPermissionRepositoryIntegTestAbstract.java new file mode 100644 index 00000000000..bc218a537c5 --- /dev/null +++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/ApplicationPermissionRepositoryIntegTestAbstract.java @@ -0,0 +1,95 @@ +package org.apache.isis.extensions.secman.applib; + +import java.util.Arrays; +import java.util.List; + +import javax.inject.Inject; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import org.apache.isis.applib.services.appfeat.ApplicationFeatureId; +import org.apache.isis.applib.value.Password; +import org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission; +import org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermissionRepository; +import org.apache.isis.extensions.secman.applib.role.dom.ApplicationRole; +import org.apache.isis.extensions.secman.applib.role.dom.ApplicationRoleRepository; +import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUser; +import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUserRepository; +import org.apache.isis.extensions.secman.applib.user.dom.ApplicationUserStatus; +import org.apache.isis.testing.integtestsupport.applib.IsisIntegrationTestAbstract; + +import static org.apache.isis.applib.services.appfeat.ApplicationFeatureId.newType; +import static org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermissionMode.CHANGING; +import static org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermissionRule.ALLOW; + +import lombok.val; + +public abstract class ApplicationPermissionRepositoryIntegTestAbstract extends IsisIntegrationTestAbstract { + + protected ApplicationUser maryUser, mungoUser, midgeUser; + protected ApplicationRole girlRole, dogRole, mouseRole, littleRole, flatDwellerRole; + protected ApplicationPermission rideLiftForGirlRolePerm, rideLiftForDogRolePerm, rideLiftForMouseRolePerm; + protected ApplicationPermission liftButtonForGirlRolePerm; + protected ApplicationPermission chaseCatsForDogRolePerm; + protected ApplicationPermission eatCheeseForMouseRolePerm; + + @BeforeEach + void setUp() { + maryUser = userRepository + .upsertLocal("mary", Password.of("marypass"), ApplicationUserStatus.UNLOCKED); + mungoUser = userRepository + .upsertLocal("mungo", Password.of("mungopass"), ApplicationUserStatus.UNLOCKED); + midgeUser = userRepository.upsertLocal("midge", Password.of("midgepass"), ApplicationUserStatus.UNLOCKED); + + girlRole = roleRepository.upsert("girl", "Girl"); + dogRole = roleRepository.upsert("dog", "Dog"); + mouseRole = roleRepository.upsert("mouse", "Mouse"); + + littleRole = roleRepository.upsert("little", "Little"); + flatDwellerRole = roleRepository.upsert("flat-dweller", "Flat Dweller"); + + roleRepository.addRoleToUser(girlRole, maryUser); + roleRepository.addRoleToUser(littleRole, maryUser); + roleRepository.addRoleToUser(flatDwellerRole, maryUser); + + roleRepository.addRoleToUser(dogRole, mungoUser); + roleRepository.addRoleToUser(flatDwellerRole, mungoUser); + + roleRepository.addRoleToUser(mouseRole, midgeUser); + roleRepository.addRoleToUser(littleRole, midgeUser); + roleRepository.addRoleToUser(flatDwellerRole, midgeUser); + + ApplicationFeatureId rideLiftFeature = newType("mmm.RideLiftService"); + + liftButtonForGirlRolePerm = permissionRepository.newPermission(girlRole, ALLOW, CHANGING, newType("mmm.PressLiftButtonService")); + rideLiftForGirlRolePerm = permissionRepository.newPermission(girlRole, ALLOW, CHANGING, rideLiftFeature); + rideLiftForDogRolePerm = permissionRepository.newPermission(dogRole, ALLOW, CHANGING, rideLiftFeature); + chaseCatsForDogRolePerm = permissionRepository.newPermission(dogRole, ALLOW, CHANGING, newType("mmm.ChaseCatsService")); + rideLiftForMouseRolePerm = permissionRepository.newPermission(mouseRole, ALLOW, CHANGING, rideLiftFeature); + eatCheeseForMouseRolePerm = permissionRepository.newPermission(mouseRole, ALLOW, CHANGING, newType("mmm.EatsCheeseService")); + } + + @Test + void end_to_end() { + + // when + val maryPermissions = permissionRepository.findByUser(maryUser); + + // then + Assertions.assertThat(maryPermissions).containsExactlyInAnyOrder(liftButtonForGirlRolePerm, rideLiftForGirlRolePerm); + + // when + final List adhocPermissions = permissionRepository.findByRoleNames(Arrays.asList(girlRole.getName(), mouseRole.getName())); + + // then + Assertions.assertThat(adhocPermissions).containsExactlyInAnyOrder(liftButtonForGirlRolePerm, rideLiftForGirlRolePerm, rideLiftForMouseRolePerm, eatCheeseForMouseRolePerm); + + } + + @Inject ApplicationPermissionRepository permissionRepository; + @Inject ApplicationRoleRepository roleRepository; + @Inject ApplicationUserRepository userRepository; + +} \ No newline at end of file diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/MmmModule.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/MmmModule.java new file mode 100644 index 00000000000..92b86a309cd --- /dev/null +++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/MmmModule.java @@ -0,0 +1,19 @@ +package org.apache.isis.extensions.secman.applib.mmm; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +import org.apache.isis.extensions.secman.applib.mmm.dom.ChaseCatsService; +import org.apache.isis.extensions.secman.applib.mmm.dom.EatCheeseService; +import org.apache.isis.extensions.secman.applib.mmm.dom.PressLiftButtonService; +import org.apache.isis.extensions.secman.applib.mmm.dom.RideLiftService; + +@Configuration +@Import({ + PressLiftButtonService.class, + RideLiftService.class, + ChaseCatsService.class, + EatCheeseService.class, +}) +public class MmmModule { +} diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/ChaseCatsService.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/ChaseCatsService.java new file mode 100644 index 00000000000..088fae44276 --- /dev/null +++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/ChaseCatsService.java @@ -0,0 +1,10 @@ +package org.apache.isis.extensions.secman.applib.mmm.dom; + +import org.apache.isis.applib.annotation.Action; +import org.apache.isis.applib.annotation.DomainService; + +@DomainService(logicalTypeName = "mmm.ChaseCatsService") +public class ChaseCatsService { + @Action + public void chaseCats() {} +} diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/EatCheeseService.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/EatCheeseService.java new file mode 100644 index 00000000000..30e1e92000e --- /dev/null +++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/EatCheeseService.java @@ -0,0 +1,10 @@ +package org.apache.isis.extensions.secman.applib.mmm.dom; + +import org.apache.isis.applib.annotation.Action; +import org.apache.isis.applib.annotation.DomainService; + +@DomainService(logicalTypeName = "mmm.EatsCheeseService") +public class EatCheeseService { + @Action + public void eatCheese() {} +} diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/PressLiftButtonService.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/PressLiftButtonService.java new file mode 100644 index 00000000000..79d7ec0a384 --- /dev/null +++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/PressLiftButtonService.java @@ -0,0 +1,10 @@ +package org.apache.isis.extensions.secman.applib.mmm.dom; + +import org.apache.isis.applib.annotation.Action; +import org.apache.isis.applib.annotation.DomainService; + +@DomainService(logicalTypeName = "mmm.PressLiftButtonService") +public class PressLiftButtonService { + @Action + public void pressLiftButton() {} +} diff --git a/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/RideLiftService.java b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/RideLiftService.java new file mode 100644 index 00000000000..5b4e7a9b26d --- /dev/null +++ b/extensions/security/secman/applib/src/test/java/org/apache/isis/extensions/secman/applib/mmm/dom/RideLiftService.java @@ -0,0 +1,10 @@ +package org.apache.isis.extensions.secman.applib.mmm.dom; + +import org.apache.isis.applib.annotation.Action; +import org.apache.isis.applib.annotation.DomainService; + +@DomainService(logicalTypeName = "mmm.RideLiftService") +public class RideLiftService { + @Action + public void rideLift() {} +} diff --git a/extensions/security/secman/persistence-jdo/log4j2-test.xml b/extensions/security/secman/persistence-jdo/log4j2-test.xml new file mode 100644 index 00000000000..0ed7986e245 --- /dev/null +++ b/extensions/security/secman/persistence-jdo/log4j2-test.xml @@ -0,0 +1,78 @@ + + + + + ???? + %xwEx + %5p + yyyy-MM-dd HH:mm:ss.SSS + %clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD} + %d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/security/secman/persistence-jdo/pom.xml b/extensions/security/secman/persistence-jdo/pom.xml index accef62cb6c..3c57db0e2df 100644 --- a/extensions/security/secman/persistence-jdo/pom.xml +++ b/extensions/security/secman/persistence-jdo/pom.xml @@ -37,19 +37,23 @@ - - org.apache.isis.persistence - isis-persistence-jdo-applib - provided + org.apache.isis.extensions + isis-extensions-secman-applib + test + test-jar + + + + org.apache.isis.extensions + isis-extensions-secman-integration org.apache.isis.persistence isis-persistence-jdo-datanucleus - provided @@ -59,14 +63,15 @@ - org.apache.isis.extensions - isis-extensions-secman-integration - provided + org.apache.isis.testing + isis-testing-fixtures-applib - org.apache.isis.testing - isis-testing-fixtures-applib + org.apache.isis.mavendeps + isis-mavendeps-integtests + pom + test diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java index 14de30b5199..0a1e4465732 100644 --- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java +++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/IsisModuleExtSecmanPersistenceJdo.java @@ -21,6 +21,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegration; import org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermission; import org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermissionRepository; import org.apache.isis.extensions.secman.jdo.role.dom.ApplicationRole; @@ -30,7 +31,7 @@ import org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUser; import org.apache.isis.extensions.secman.jdo.user.dom.ApplicationUserRepository; import org.apache.isis.extensions.secman.jdo.util.RegexReplacer; -import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegration; +import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus; /** * @since 2.0 {@index} @@ -39,6 +40,7 @@ @Import({ // modules IsisModuleExtSecmanIntegration.class, + IsisModulePersistenceJdoDatanucleus.class, // services ApplicationPermissionRepository.class, diff --git a/extensions/security/secman/persistence-jdo/src/test/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermissionRepository_IntegTest.java b/extensions/security/secman/persistence-jdo/src/test/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermissionRepository_IntegTest.java new file mode 100644 index 00000000000..ad75eb00b29 --- /dev/null +++ b/extensions/security/secman/persistence-jdo/src/test/java/org/apache/isis/extensions/secman/jdo/permission/dom/ApplicationPermissionRepository_IntegTest.java @@ -0,0 +1,40 @@ +package org.apache.isis.extensions.secman.jdo.permission.dom; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.PropertySources; +import org.springframework.test.context.ActiveProfiles; + +import org.apache.isis.core.config.presets.IsisPresets; +import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices; +import org.apache.isis.extensions.secman.applib.ApplicationPermissionRepositoryIntegTestAbstract; +import org.apache.isis.extensions.secman.applib.mmm.MmmModule; +import org.apache.isis.extensions.secman.jdo.IsisModuleExtSecmanPersistenceJdo; +import org.apache.isis.security.bypass.IsisModuleSecurityBypass; + +@SpringBootTest( + classes = ApplicationPermissionRepository_IntegTest.AppManifest.class +) +@ActiveProfiles("test") +class ApplicationPermissionRepository_IntegTest extends ApplicationPermissionRepositoryIntegTestAbstract { + + @SpringBootConfiguration + @EnableAutoConfiguration + @Import({ + IsisModuleCoreRuntimeServices.class, + IsisModuleSecurityBypass.class, + IsisModuleExtSecmanPersistenceJdo.class, + + MmmModule.class, + }) + @PropertySources({ + @PropertySource(IsisPresets.UseLog4j2Test), + }) + public static class AppManifest { + } + + +} \ No newline at end of file diff --git a/extensions/security/secman/persistence-jdo/src/test/resources/application-test.yml b/extensions/security/secman/persistence-jdo/src/test/resources/application-test.yml new file mode 100644 index 00000000000..170aea70bdb --- /dev/null +++ b/extensions/security/secman/persistence-jdo/src/test/resources/application-test.yml @@ -0,0 +1,29 @@ +isis: + extensions: + secman: + seed: + admin: + user-name: "sven" + password: "pass" + role-name: "isis-ext-secman-admin" + namespace-permissions: + sticky: "isis" + additional: "mmm" + regular-user: + role-name: "isis-ext-secman-user" + permissionsEvaluationPolicy: "ALLOW_BEATS_VETO" + + + persistence: + schema: + auto-create-schemas: "ISISEXTENSIONSSECMAN" + + +spring: + jpa: + show-sql: true + + +datanucleus: + schema: + autoCreateTables: true diff --git a/extensions/security/secman/persistence-jpa/log4j2-test.xml b/extensions/security/secman/persistence-jpa/log4j2-test.xml new file mode 100644 index 00000000000..0ed7986e245 --- /dev/null +++ b/extensions/security/secman/persistence-jpa/log4j2-test.xml @@ -0,0 +1,78 @@ + + + + + ???? + %xwEx + %5p + yyyy-MM-dd HH:mm:ss.SSS + %clr{%d{${LOG_DATEFORMAT_PATTERN}}}{faint} %clr{${LOG_LEVEL_PATTERN}} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD} + %d{${LOG_DATEFORMAT_PATTERN}} ${LOG_LEVEL_PATTERN} ${sys:PID} --- [%t] %-40.40c{1.} : %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/extensions/security/secman/persistence-jpa/pom.xml b/extensions/security/secman/persistence-jpa/pom.xml index d304cd30a10..d4bb98afae8 100644 --- a/extensions/security/secman/persistence-jpa/pom.xml +++ b/extensions/security/secman/persistence-jpa/pom.xml @@ -37,9 +37,15 @@ - + + org.apache.isis.extensions + isis-extensions-secman-applib + test + test-jar + + org.apache.isis.extensions isis-extensions-secman-integration @@ -47,8 +53,7 @@ org.apache.isis.persistence - isis-persistence-jpa-applib - provided + isis-persistence-jpa-eclipselink @@ -69,6 +74,13 @@ + + org.apache.isis.mavendeps + isis-mavendeps-integtests + pom + test + + diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java index 86491379fee..09ba54b70e0 100644 --- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java +++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/IsisModuleExtSecmanPersistenceJpa.java @@ -22,6 +22,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; +import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegration; import org.apache.isis.extensions.secman.jpa.permission.dom.ApplicationPermission; import org.apache.isis.extensions.secman.jpa.permission.dom.ApplicationPermissionRepository; import org.apache.isis.extensions.secman.jpa.role.dom.ApplicationRole; @@ -31,7 +32,7 @@ import org.apache.isis.extensions.secman.jpa.user.dom.ApplicationUser; import org.apache.isis.extensions.secman.jpa.user.dom.ApplicationUserRepository; import org.apache.isis.extensions.secman.jpa.util.RegexReplacer; -import org.apache.isis.extensions.secman.integration.IsisModuleExtSecmanIntegration; +import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink; /** * @since 2.0 {@index} @@ -40,6 +41,7 @@ @Import({ // modules IsisModuleExtSecmanIntegration.class, + IsisModulePersistenceJpaEclipselink.class, // services ApplicationPermissionRepository.class, diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java index 16fc5e1f977..f53e04dc956 100644 --- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java +++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermission.java @@ -61,17 +61,17 @@ + " WHERE p.role = :role"), @NamedQuery( name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_USER, - query = "SELECT p " - + "FROM ApplicationPermission p " - + "INNER JOIN ApplicationRole r " - + "INNER JOIN ApplicationUser u " - + "WHERE u.username = :username"), + query = "SELECT perm " + + "FROM ApplicationPermission perm " + + "JOIN perm.role role " + + "JOIN role.users user " + + "WHERE user.username = :username"), @NamedQuery( name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_ROLE_NAMES, - query = "SELECT p " - + "FROM ApplicationPermission p " - + "INNER JOIN ApplicationRole r " - + "WHERE r.name IN :roleNames"), + query = "SELECT perm " + + "FROM ApplicationPermission perm " + + "JOIN perm.role role " + + "WHERE role.name IN :roleNames"), @NamedQuery( name = org.apache.isis.extensions.secman.applib.permission.dom.ApplicationPermission.NAMED_QUERY_FIND_BY_FEATURE, query = "SELECT p " diff --git a/extensions/security/secman/persistence-jpa/src/test/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository_IntegTest.java b/extensions/security/secman/persistence-jpa/src/test/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository_IntegTest.java new file mode 100644 index 00000000000..1c0be86b5e8 --- /dev/null +++ b/extensions/security/secman/persistence-jpa/src/test/java/org/apache/isis/extensions/secman/jpa/permission/dom/ApplicationPermissionRepository_IntegTest.java @@ -0,0 +1,40 @@ +package org.apache.isis.extensions.secman.jpa.permission.dom; + +import org.springframework.boot.SpringBootConfiguration; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.PropertySource; +import org.springframework.context.annotation.PropertySources; +import org.springframework.test.context.ActiveProfiles; + +import org.apache.isis.core.config.presets.IsisPresets; +import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices; +import org.apache.isis.extensions.secman.applib.ApplicationPermissionRepositoryIntegTestAbstract; +import org.apache.isis.extensions.secman.applib.mmm.MmmModule; +import org.apache.isis.extensions.secman.jpa.IsisModuleExtSecmanPersistenceJpa; +import org.apache.isis.security.bypass.IsisModuleSecurityBypass; + +@SpringBootTest( + classes = ApplicationPermissionRepository_IntegTest.AppManifest.class +) +@ActiveProfiles("test") +class ApplicationPermissionRepository_IntegTest extends ApplicationPermissionRepositoryIntegTestAbstract { + + @SpringBootConfiguration + @EnableAutoConfiguration + @Import({ + IsisModuleCoreRuntimeServices.class, + IsisModuleSecurityBypass.class, + IsisModuleExtSecmanPersistenceJpa.class, + + MmmModule.class, + }) + @PropertySources({ + @PropertySource(IsisPresets.UseLog4j2Test), + }) + public static class AppManifest { + } + + +} \ No newline at end of file diff --git a/extensions/security/secman/persistence-jpa/src/test/resources/application-test.yml b/extensions/security/secman/persistence-jpa/src/test/resources/application-test.yml new file mode 100644 index 00000000000..9cd5cf3a980 --- /dev/null +++ b/extensions/security/secman/persistence-jpa/src/test/resources/application-test.yml @@ -0,0 +1,24 @@ +isis: + extensions: + secman: + seed: + admin: + user-name: "sven" + password: "pass" + role-name: "isis-ext-secman-admin" + namespace-permissions: + sticky: "isis" + additional: "mmm" + regular-user: + role-name: "isis-ext-secman-user" + permissionsEvaluationPolicy: "ALLOW_BEATS_VETO" + + + persistence: + schema: + auto-create-schemas: "ISISEXTENSIONSSECMAN" + + +spring: + jpa: + show-sql: true diff --git a/extensions/security/secman/pom.xml b/extensions/security/secman/pom.xml index 94fb4a0ba8e..6ddedf2b38c 100644 --- a/extensions/security/secman/pom.xml +++ b/extensions/security/secman/pom.xml @@ -45,6 +45,13 @@ isis-extensions-secman-applib 2.0.0-SNAPSHOT + + org.apache.isis.extensions + isis-extensions-secman-applib + test + test-jar + 2.0.0-SNAPSHOT + org.apache.isis.extensions isis-extensions-secman-encryption-jbcrypt @@ -65,6 +72,15 @@ isis-extensions-secman-shiro-realm 2.0.0-SNAPSHOT + + + org.apache.isis.testing + isis-testing-integtestsupport + 2.0.0-SNAPSHOT + pom + import + + diff --git a/persistence/jdo/datanucleus/pom.xml b/persistence/jdo/datanucleus/pom.xml index 920590b789e..c21981ffba6 100644 --- a/persistence/jdo/datanucleus/pom.xml +++ b/persistence/jdo/datanucleus/pom.xml @@ -36,7 +36,7 @@ org.apache.isis.persistence - isis-persistence-jdo-applib + isis-persistence-jdo-integration @@ -70,10 +70,6 @@ datanucleus-jodatime - - org.apache.isis.persistence - isis-persistence-jdo-integration - diff --git a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java similarity index 98% rename from persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java rename to persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java index 9ff7938c297..a5e88707824 100644 --- a/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModuleJdoDatanucleus.java +++ b/persistence/jdo/datanucleus/src/main/java/org/apache/isis/persistence/jdo/datanucleus/IsisModulePersistenceJdoDatanucleus.java @@ -50,7 +50,7 @@ import org.apache.isis.persistence.jdo.datanucleus.mixins.Persistable_datanucleusVersionLong; import org.apache.isis.persistence.jdo.datanucleus.mixins.Persistable_datanucleusVersionTimestamp; import org.apache.isis.persistence.jdo.datanucleus.mixins.Persistable_downloadJdoMetadata; -import org.apache.isis.persistence.jdo.integration.IsisModuleJdoIntegration; +import org.apache.isis.persistence.jdo.integration.IsisModulePersistenceJdoIntegration; import org.apache.isis.persistence.jdo.spring.integration.JdoDialect; import org.apache.isis.persistence.jdo.spring.integration.JdoTransactionManager; import org.apache.isis.persistence.jdo.spring.integration.LocalPersistenceManagerFactoryBean; @@ -66,7 +66,7 @@ @Configuration @Import({ // modules - IsisModuleJdoIntegration.class, + IsisModulePersistenceJdoIntegration.class, // @Component's DnEntityDiscoveryListener.class, @@ -83,7 +83,7 @@ }) @EnableConfigurationProperties(DnSettings.class) @Log4j2 -public class IsisModuleJdoDatanucleus { +public class IsisModulePersistenceJdoDatanucleus { /** * Conveniently registers this dialect as a {@link PersistenceExceptionTranslator} with Spring. diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModulePersistenceJdoIntegration.java similarity index 88% rename from persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java rename to persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModulePersistenceJdoIntegration.java index 9e1718b7e7f..aa7a5c07db8 100644 --- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModuleJdoIntegration.java +++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/IsisModulePersistenceJdoIntegration.java @@ -24,18 +24,18 @@ import org.apache.isis.core.runtime.IsisModuleCoreRuntime; import org.apache.isis.persistence.jdo.applib.IsisModulePersistenceJdoApplib; import org.apache.isis.persistence.jdo.integration.changetracking.EntityChangeTrackerJdo; -import org.apache.isis.persistence.jdo.metamodel.IsisModuleJdoMetamodel; +import org.apache.isis.persistence.jdo.metamodel.IsisModulePersistenceJdoMetamodel; @Configuration @Import({ // modules IsisModuleCoreRuntime.class, IsisModulePersistenceJdoApplib.class, - IsisModuleJdoMetamodel.class, + IsisModulePersistenceJdoMetamodel.class, // services EntityChangeTrackerJdo.class, }) -public class IsisModuleJdoIntegration { +public class IsisModulePersistenceJdoIntegration { } diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModulePersistenceJdoMetamodel.java similarity index 96% rename from persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java rename to persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModulePersistenceJdoMetamodel.java index bd391a9d01b..60769ed56ce 100644 --- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModuleJdoMetamodel.java +++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/IsisModulePersistenceJdoMetamodel.java @@ -38,7 +38,7 @@ // @Service's }) -public class IsisModuleJdoMetamodel { +public class IsisModulePersistenceJdoMetamodel { public static final String NAMESPACE = "isis.persistence.jdo"; diff --git a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java index 09f75ce9644..c7f1657f961 100644 --- a/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java +++ b/persistence/jdo/metamodel/src/main/java/org/apache/isis/persistence/jdo/metamodel/menu/JdoMetamodelMenu.java @@ -35,7 +35,7 @@ import org.apache.isis.applib.value.Blob; import org.apache.isis.applib.value.NamedWithMimeType.CommonMimeType; import org.apache.isis.persistence.jdo.applib.services.JdoSupportService; -import org.apache.isis.persistence.jdo.metamodel.IsisModuleJdoMetamodel; +import org.apache.isis.persistence.jdo.metamodel.IsisModulePersistenceJdoMetamodel; import org.apache.isis.persistence.jdo.provider.entities.JdoFacetContext; import lombok.RequiredArgsConstructor; @@ -53,7 +53,7 @@ @RequiredArgsConstructor(onConstructor_ = { @Inject }) public class JdoMetamodelMenu { - public final static String LOGICAL_TYPE_NAME = IsisModuleJdoMetamodel.NAMESPACE + ".JdoMetamodelMenu"; + public final static String LOGICAL_TYPE_NAME = IsisModulePersistenceJdoMetamodel.NAMESPACE + ".JdoMetamodelMenu"; final JdoSupportService jdoSupport; final JdoFacetContext jdoFacetContext; diff --git a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModulePersistenceJdoSpring.java similarity index 95% rename from persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java rename to persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModulePersistenceJdoSpring.java index 5e5afbb377c..e68ae347628 100644 --- a/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModuleJdoSpring.java +++ b/persistence/jdo/spring/src/main/java/org/apache/isis/persistence/jdo/spring/IsisModulePersistenceJdoSpring.java @@ -21,6 +21,6 @@ import org.springframework.context.annotation.Configuration; @Configuration -public class IsisModuleJdoSpring { +public class IsisModulePersistenceJdoSpring { } diff --git a/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/IsisModulePersistenceJpaApplib.java b/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/IsisModulePersistenceJpaApplib.java new file mode 100644 index 00000000000..faa749a54c4 --- /dev/null +++ b/persistence/jpa/applib/src/main/java/org/apache/isis/persistence/jpa/applib/IsisModulePersistenceJpaApplib.java @@ -0,0 +1,29 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.isis.persistence.jpa.applib; + +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; + +@Configuration +@Import({ +}) +public class IsisModulePersistenceJpaApplib { + +} diff --git a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModulePersistenceJpaEclipselink.java similarity index 97% rename from persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java rename to persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModulePersistenceJpaEclipselink.java index a1ea08fddc6..06594c5a8e7 100644 --- a/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModuleJpaEclipselink.java +++ b/persistence/jpa/eclipselink/src/main/java/org/apache/isis/persistence/jpa/eclipselink/IsisModulePersistenceJpaEclipselink.java @@ -43,7 +43,7 @@ import org.apache.isis.commons.internal.exceptions._Exceptions; import org.apache.isis.core.config.IsisConfiguration; import org.apache.isis.persistence.jpa.eclipselink.config.ElSettings; -import org.apache.isis.persistence.jpa.integration.IsisModuleJpaIntegration; +import org.apache.isis.persistence.jpa.integration.IsisModulePersistenceJpaIntegration; import lombok.SneakyThrows; import lombok.val; @@ -61,15 +61,15 @@ */ @Configuration @Import({ - IsisModuleJpaIntegration.class + IsisModulePersistenceJpaIntegration.class }) @EnableConfigurationProperties(ElSettings.class) @Log4j2 -public class IsisModuleJpaEclipselink extends JpaBaseConfiguration { +public class IsisModulePersistenceJpaEclipselink extends JpaBaseConfiguration { @Inject private ElSettings elSettings; - protected IsisModuleJpaEclipselink( + protected IsisModulePersistenceJpaEclipselink( IsisConfiguration isisConfiguration, DataSource dataSource, JpaProperties properties, diff --git a/persistence/jpa/integration/pom.xml b/persistence/jpa/integration/pom.xml index 14d197b75db..c0f9fe2e997 100644 --- a/persistence/jpa/integration/pom.xml +++ b/persistence/jpa/integration/pom.xml @@ -68,11 +68,6 @@ - - org.apache.isis.persistence - isis-persistence-jpa-applib - - org.apache.isis.persistence isis-persistence-jpa-metamodel diff --git a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModuleJpaIntegration.java b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java similarity index 91% rename from persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModuleJpaIntegration.java rename to persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java index 84c418a4ff1..34d193dc3c4 100644 --- a/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModuleJpaIntegration.java +++ b/persistence/jpa/integration/src/main/java/org/apache/isis/persistence/jpa/integration/IsisModulePersistenceJpaIntegration.java @@ -27,12 +27,13 @@ import org.apache.isis.persistence.jpa.integration.metamodel.JpaProgrammingModel; import org.apache.isis.persistence.jpa.integration.services.JpaSupportServiceUsingSpring; import org.apache.isis.persistence.jpa.integration.typeconverters.JavaAwtBufferedImageByteArrayConverter; +import org.apache.isis.persistence.jpa.metamodel.IsisModulePersistenceJpaMetamodel; @Configuration @Import({ // modules IsisModuleCoreRuntime.class, -// IsisModulePersistenceJpaApplib.class, + IsisModulePersistenceJpaMetamodel.class, // @Component's JpaProgrammingModel.class, @@ -47,6 +48,6 @@ // @Converter's JavaAwtBufferedImageByteArrayConverter.class }) -public class IsisModuleJpaIntegration { +public class IsisModulePersistenceJpaIntegration { } diff --git a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModuleJpaMetamodel.java b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java similarity index 79% rename from persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModuleJpaMetamodel.java rename to persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java index 83727974f2d..2e069990ca5 100644 --- a/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModuleJpaMetamodel.java +++ b/persistence/jpa/metamodel/src/main/java/org/apache/isis/persistence/jpa/metamodel/IsisModulePersistenceJpaMetamodel.java @@ -22,20 +22,22 @@ import org.springframework.context.annotation.Import; import org.apache.isis.core.runtime.IsisModuleCoreRuntime; +import org.apache.isis.persistence.jpa.applib.IsisModulePersistenceJpaApplib; @Configuration @Import({ // modules IsisModuleCoreRuntime.class, - //IsisModulePersistenceJpaApplib.class, + IsisModulePersistenceJpaApplib.class, + // TODO: to rationalise with the jpa integration module; JpaProgrammingModel defined in both. // @Component's - JpaProgrammingModel.class, + // JpaProgrammingModel.class, //JpaMetamodelMenu.class, // @Service's }) -public class IsisModuleJpaMetamodel { +public class IsisModulePersistenceJpaMetamodel { } diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdo.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdo.java index 542790e5d3b..76026ab48ea 100644 --- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdo.java +++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdo.java @@ -26,7 +26,7 @@ import org.apache.isis.core.config.presets.IsisPresets; import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices; -import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus; +import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus; import org.apache.isis.security.bypass.IsisModuleSecurityBypass; import org.apache.isis.testdomain.jdo.JdoTestDomainModule; import org.apache.isis.testdomain.model.stereotypes.MyService; @@ -38,7 +38,7 @@ MyService.class, // testing injection into entities IsisModuleCoreRuntimeServices.class, IsisModuleSecurityBypass.class, - IsisModuleJdoDatanucleus.class, + IsisModulePersistenceJdoDatanucleus.class, IsisModuleTestingFixturesApplib.class, KVStoreForTesting.class, // Helper for JUnit Tests }) diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdoAndShiro.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdoAndShiro.java index 0a232006de6..99b7084dfcf 100644 --- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdoAndShiro.java +++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJdoAndShiro.java @@ -32,7 +32,7 @@ import org.apache.isis.extensions.secman.applib.SecmanConfiguration; import org.apache.isis.extensions.secman.applib.permission.spi.PermissionsEvaluationService; import org.apache.isis.extensions.secman.applib.permission.spi.PermissionsEvaluationServiceAllowBeatsVeto; -import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus; +import org.apache.isis.persistence.jdo.datanucleus.IsisModulePersistenceJdoDatanucleus; import org.apache.isis.security.shiro.IsisModuleSecurityShiro; import org.apache.isis.testdomain.jdo.JdoTestDomainModule; import org.apache.isis.testdomain.util.kv.KVStoreForTesting; @@ -42,7 +42,7 @@ @Import({ IsisModuleCoreRuntimeServices.class, IsisModuleSecurityShiro.class, - IsisModuleJdoDatanucleus.class, + IsisModulePersistenceJdoDatanucleus.class, IsisModuleTestingFixturesApplib.class, KVStoreForTesting.class, // Helper for JUnit Tests }) diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJpa.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJpa.java index 37400827bcb..a282dd5c63f 100644 --- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJpa.java +++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingJpa.java @@ -26,7 +26,7 @@ import org.apache.isis.core.config.presets.IsisPresets; import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices; -import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink; +import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink; import org.apache.isis.security.bypass.IsisModuleSecurityBypass; import org.apache.isis.testdomain.jpa.JpaTestDomainModule; import org.apache.isis.testdomain.model.stereotypes.MyService; @@ -46,7 +46,7 @@ IsisModuleCoreRuntimeServices.class ,IsisModuleSecurityBypass.class - ,IsisModuleJpaEclipselink.class + ,IsisModulePersistenceJpaEclipselink.class ,IsisModuleTestingFixturesApplib.class ,KVStoreForTesting.class, // Helper for JUnit Tests }) diff --git a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingSpringDataJpa.java b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingSpringDataJpa.java index f76598ed44d..b64c36ea8b1 100644 --- a/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingSpringDataJpa.java +++ b/regressiontests/stable/src/main/java/org/apache/isis/testdomain/conf/Configuration_usingSpringDataJpa.java @@ -26,7 +26,7 @@ import org.apache.isis.core.config.presets.IsisPresets; import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices; -import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink; +import org.apache.isis.persistence.jpa.eclipselink.IsisModulePersistenceJpaEclipselink; import org.apache.isis.security.bypass.IsisModuleSecurityBypass; import org.apache.isis.testdomain.jpa.springdata.SpringDataJpaTestModule; import org.apache.isis.testdomain.model.stereotypes.MyService; @@ -43,7 +43,7 @@ IsisModuleCoreRuntimeServices.class ,IsisModuleSecurityBypass.class - ,IsisModuleJpaEclipselink.class + ,IsisModulePersistenceJpaEclipselink.class //,IsisModuleTestingFixturesApplib.class ,KVStoreForTesting.class, // Helper for JUnit Tests })