You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/04/14 22:25:32 UTC

[isis] 01/01: ISIS-2614 : cleans up secman imports and references

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

danhaywood pushed a commit to branch ISIS-2614
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 658d594b4deab989371fbf7679b2016a68498ea7
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Apr 14 23:25:04 2021 +0100

    ISIS-2614 : cleans up secman imports and references
---
 .../secman/api/role/ApplicationRoleRepository.java |  5 ++++
 .../secman/api/user/ApplicationUserRepository.java |  8 ++++++
 .../secman/model/IsisModuleExtSecmanModel.java     | 30 +++++++++++++++++---
 .../dom/feature/ApplicationFeatureViewModel.java   | 25 +++++++----------
 .../model/dom/feature/ApplicationTypeMember.java   |  7 ++---
 .../secman/model/dom/role/ApplicationRoleMenu.java | 10 ++++---
 extensions/security/secman/persistence-jdo/pom.xml | 23 ++++++++--------
 .../jdo/IsisModuleExtSecmanPersistenceJdo.java     | 32 ++++++++++++++++++----
 .../jdo/dom/role/ApplicationRoleRepository.java    | 28 +++++++++++--------
 .../AbstractRoleAndPermissionsFixtureScript.java   | 14 ++++------
 extensions/security/secman/persistence-jpa/pom.xml | 29 +++++++++-----------
 .../jpa/IsisModuleExtSecmanPersistenceJpa.java     | 17 ++++++++----
 12 files changed, 143 insertions(+), 85 deletions(-)

diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRoleRepository.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRoleRepository.java
index 75b16a1..da3e1e7 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRoleRepository.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRoleRepository.java
@@ -50,6 +50,11 @@ public interface ApplicationRoleRepository<R extends ApplicationRole> {
     Optional<R> findByName(String roleName);
     Optional<R> findByNameCached(String roleName);
 
+    default R upsert(final String name, final String roleDescription) {
+        return findByName(name)
+                .orElseGet(() -> newRole(name, roleDescription));
+    }
+
     void addRoleToUser(ApplicationRole role, ApplicationUser user);
     void removeRoleFromUser(ApplicationRole role, ApplicationUser user);
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserRepository.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserRepository.java
index 7d0b7cf..791620b 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserRepository.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUserRepository.java
@@ -65,6 +65,14 @@ public interface ApplicationUserRepository<U extends ApplicationUser> {
 
     U newUser(String username, AccountType accountType, Consumer<U> beforePersist);
 
+    default U upsertLocal(
+            @NonNull String username,
+            @Nullable Password password,
+            @NonNull ApplicationUserStatus status) {
+        return findByUsername(username)
+                .orElseGet(() -> newLocalUser(username, password, status));
+    }
+
     default U newLocalUser(
             @NonNull String username,
             @Nullable Password password,
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/IsisModuleExtSecmanModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/IsisModuleExtSecmanModel.java
index 642daec..e7f9dc1 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/IsisModuleExtSecmanModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/IsisModuleExtSecmanModel.java
@@ -20,15 +20,37 @@ package org.apache.isis.extensions.secman.model;
 
 import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
+import org.apache.isis.extensions.secman.model.dom.feature.ApplicationFeatureViewModels;
+import org.apache.isis.extensions.secman.model.dom.permission.ApplicationOrphanedPermissionManager;
+import org.apache.isis.extensions.secman.model.dom.permission.ApplicationPermissionMenu;
+import org.apache.isis.extensions.secman.model.dom.role.ApplicationRoleMenu;
+import org.apache.isis.extensions.secman.model.dom.tenancy.ApplicationTenancyMenu;
+import org.apache.isis.extensions.secman.model.dom.user.ApplicationUserMenu;
+import org.apache.isis.extensions.secman.model.facets.TenantedAuthorizationFacetFactory;
 
 /**
  * @since 2.0 {@index}
  */
 @Configuration
-@ComponentScan(
-        basePackageClasses= {
-                IsisModuleExtSecmanModel.class
-        })
+@Import({
+        // Module
+        IsisModuleExtSecmanApi.class,
+
+        // @DomainService
+        ApplicationFeatureViewModels.class,
+        ApplicationOrphanedPermissionManager.class,
+        ApplicationPermissionMenu.class,
+        ApplicationRoleMenu.class,
+        ApplicationTenancyMenu.class,
+        ApplicationUserMenu.class,
+
+        // @Component
+        TenantedAuthorizationFacetFactory.Register.class,
+
+})
 public class IsisModuleExtSecmanModel {
 
 }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
index 955c8c1..dbcd3be 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationFeatureViewModel.java
@@ -53,11 +53,6 @@ import lombok.val;
 /**
  * View model identified by {@link ApplicationFeatureId} and backed by an {@link ApplicationFeature}.
  */
-//@MemberGroupLayout(
-//        columnSpans = {6,0,6,12},
-//        left = {"Id", "Data Type", "Metadata"},
-//        right= {"Parent", "Contributed", "Detail"}
-//)
 public abstract class ApplicationFeatureViewModel implements ViewModel {
 
     public static abstract class PropertyDomainEvent<S extends ApplicationFeatureViewModel,T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<S, T> {}
@@ -86,8 +81,8 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
         case TYPE:
             return ApplicationType.class;
         case MEMBER:
-            
-            val memberSort = 
+
+            val memberSort =
             Optional.ofNullable(applicationFeatureRepository.findFeature(featureId))
                 .flatMap(ApplicationFeature::getMemberSort)
                 .orElse(null);
@@ -182,7 +177,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
             )
     @PropertyLayout(
             typicalLength=ApplicationFeatureConstants.TYPICAL_LENGTH_NAMESPACE,
-            fieldSetId="Id", 
+            fieldSetId="Id",
             sequence = "2.2")
     public String getNamespaceName() {
         return getFeatureId().getNamespace();
@@ -201,7 +196,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
             )
     @PropertyLayout(
             typicalLength=ApplicationFeatureConstants.TYPICAL_LENGTH_TYPE_SIMPLE_NAME,
-            fieldSetId="Id", 
+            fieldSetId="Id",
             sequence = "2.3")
     public String getTypeSimpleName() {
         return getFeatureId().getTypeSimpleName();
@@ -222,7 +217,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
             )
     @PropertyLayout(
             typicalLength=ApplicationFeatureConstants.TYPICAL_LENGTH_MEMBER_NAME,
-            fieldSetId="Id", 
+            fieldSetId="Id",
             sequence = "2.4")
     public String getMemberName() {
         return getFeatureId().getMemberName();
@@ -243,7 +238,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
     @PropertyLayout(
             navigable = Navigable.PARENT,
             hidden = Where.ALL_TABLES,
-            fieldSetId = "Parent", 
+            fieldSetId = "Parent",
             sequence = "2.6")
     public ApplicationFeatureViewModel getParent() {
         final ApplicationFeatureId parentId;
@@ -257,7 +252,7 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
         if (feature == null) {
             return null;
         }
-        final Class<? extends ApplicationFeatureViewModel> cls = 
+        final Class<? extends ApplicationFeatureViewModel> cls =
                 viewModelClassFor(parentId, featureRepository);
         return factory.viewModel(cls, parentId.asEncodedString());
     }
@@ -332,16 +327,16 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
         private Functions(){}
 
         public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeatureId, T> asViewModelForId(
-                final ApplicationFeatureRepository applicationFeatureRepository, 
+                final ApplicationFeatureRepository applicationFeatureRepository,
                 final FactoryService factoryService) {
 
-            return (ApplicationFeatureId input) -> 
+            return (ApplicationFeatureId input) ->
             _Casts.uncheckedCast(ApplicationFeatureViewModel
                     .newViewModel(input, applicationFeatureRepository, factoryService));
 
         }
         public static <T extends ApplicationFeatureViewModel> Function<ApplicationFeature, T> asViewModel(
-                final ApplicationFeatureRepository applicationFeatureRepository, 
+                final ApplicationFeatureRepository applicationFeatureRepository,
                 final FactoryService factoryService) {
 
             return (ApplicationFeature input) ->
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationTypeMember.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationTypeMember.java
index a9aa8b8..4c4b66c 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationTypeMember.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/feature/ApplicationTypeMember.java
@@ -25,12 +25,15 @@ import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 
+import lombok.NoArgsConstructor;
+
 @DomainObject(
         objectType = "isis.ext.secman.ApplicationTypeMember"
         )
 @DomainObjectLayout(
         bookmarking = BookmarkPolicy.AS_CHILD
         )
+@NoArgsConstructor
 public abstract class ApplicationTypeMember extends ApplicationFeatureViewModel {
 
     public static abstract class PropertyDomainEvent<S extends ApplicationTypeMember, T> extends ApplicationFeatureViewModel.PropertyDomainEvent<ApplicationTypeMember, T> {}
@@ -40,11 +43,7 @@ public abstract class ApplicationTypeMember extends ApplicationFeatureViewModel
     public static abstract class ActionDomainEvent<S extends ApplicationTypeMember> extends ApplicationFeatureViewModel.ActionDomainEvent<S> {}
 
 
-
     // -- constructors
-    public ApplicationTypeMember() {
-    }
-
     public ApplicationTypeMember(final ApplicationFeatureId featureId) {
         super(featureId);
     }
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRoleMenu.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRoleMenu.java
index db640e1..8360006 100644
--- a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRoleMenu.java
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/dom/role/ApplicationRoleMenu.java
@@ -36,6 +36,8 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 import org.apache.isis.extensions.secman.api.role.ApplicationRole;
 import org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository;
 
+import lombok.RequiredArgsConstructor;
+
 @DomainService(
         nature = NatureOfService.VIEW,
         objectType = "isis.ext.secman.ApplicationRoleMenu"
@@ -44,16 +46,16 @@ import org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository;
         named = "Security",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
         )
-public class  ApplicationRoleMenu {
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
+public class ApplicationRoleMenu {
 
     // -- domain event classes
     public static class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationRoleMenu, T> {}
     public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationRoleMenu, T> {}
     public static abstract class ActionDomainEvent extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationRoleMenu> {}
 
-    
-    @Inject private ApplicationRoleRepository<? extends ApplicationRole> applicationRoleRepository;
-    
+    private final ApplicationRoleRepository<? extends ApplicationRole> applicationRoleRepository;
+
 
     // -- iconName
     public String iconName() {
diff --git a/extensions/security/secman/persistence-jdo/pom.xml b/extensions/security/secman/persistence-jdo/pom.xml
index 02b6541..8293472 100644
--- a/extensions/security/secman/persistence-jdo/pom.xml
+++ b/extensions/security/secman/persistence-jdo/pom.xml
@@ -34,42 +34,41 @@
     <properties>
         <jar-plugin.automaticModuleName>org.apache.isis.extensions.secman.persistence.jdo</jar-plugin.automaticModuleName>
         <git-plugin.propertiesDir>org/apache/isis/extensions/secman/persistence/jdo</git-plugin.propertiesDir>
-        
+
     </properties>
 
 
     <dependencies>
-	
+
+		<dependency>
+			<groupId>org.apache.isis.extensions</groupId>
+			<artifactId>isis-extensions-secman-api</artifactId>
+		</dependency>
+
 		<dependency>
 			<groupId>org.apache.isis.persistence</groupId>
 			<artifactId>isis-persistence-jdo-applib</artifactId>
 			<scope>provided</scope>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.isis.persistence</groupId>
 			<artifactId>isis-persistence-jdo-datanucleus</artifactId>
 			<scope>provided</scope>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.isis.core</groupId>
 			<artifactId>isis-core-runtime</artifactId>
 			<scope>provided</scope>
 		</dependency>
-		
-		<dependency>
-			<groupId>org.apache.isis.extensions</groupId>
-			<artifactId>isis-extensions-secman-api</artifactId>
-			<scope>provided</scope>
-		</dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.isis.extensions</groupId>
 			<artifactId>isis-extensions-secman-model</artifactId>
 			<scope>provided</scope>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.isis.testing</groupId>
 			<artifactId>isis-testing-fixtures-applib</artifactId>
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 148215d..856cdc3 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
@@ -18,17 +18,39 @@
  */
 package org.apache.isis.extensions.secman.jdo;
 
-import org.springframework.context.annotation.ComponentScan;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Import;
+
+import org.apache.isis.extensions.secman.api.permission.ApplicationPermissionRepository;
+import org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository;
+import org.apache.isis.extensions.secman.api.tenancy.ApplicationTenancyRepository;
+import org.apache.isis.extensions.secman.api.user.ApplicationUserRepository;
+import org.apache.isis.extensions.secman.jdo.seed.SeedSecurityModuleService;
+import org.apache.isis.extensions.secman.model.IsisModuleExtSecmanModel;
 
 /**
  * @since 2.0 {@index}
  */
 @Configuration
-@ComponentScan(
-        basePackageClasses= {
-                IsisModuleExtSecmanPersistenceJdo.class
-        })
+@Import({
+        // modules
+        IsisModuleExtSecmanModel.class,
+
+        // services
+        ApplicationPermissionRepository.class,
+        ApplicationRoleRepository.class,
+        ApplicationTenancyRepository.class,
+        ApplicationUserRepository.class,
+        SeedSecurityModuleService.class,
+
+        // pretty sure we don't need to import/register these view models
+//        ApplicationPermission.class,
+//        ApplicationRole.class,
+//        ApplicationTenancy.class,
+//        ApplicationUser.class,
+
+
+})
 public class IsisModuleExtSecmanPersistenceJdo {
 
 }
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRoleRepository.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRoleRepository.java
index 24ecaa1..ff5178e 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRoleRepository.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRoleRepository.java
@@ -42,21 +42,21 @@ import lombok.val;
 
 @Repository
 @Named("isis.ext.secman.ApplicationRoleRepository")
-public class ApplicationRoleRepository 
+public class ApplicationRoleRepository
 implements org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository<ApplicationRole> {
 
     @Inject private FactoryService factoryService;
     @Inject private RepositoryService repository;
     @Inject private SecmanConfiguration configBean;
-    
+
     @Inject private javax.inject.Provider<QueryResultsCache> queryResultsCacheProvider;
 
-    
+
     @Override
     public ApplicationRole newApplicationRole() {
         return factoryService.detachedEntity(new ApplicationRole());
     }
-    
+
     @Override
     public Optional<ApplicationRole> findByNameCached(final String name) {
         return queryResultsCacheProvider.get().execute(()->findByName(name),
@@ -64,6 +64,12 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository<
     }
 
     @Override
+    public ApplicationRole upsert(final String name, final String roleDescription) {
+        return findByName(name)
+                .orElseGet(() -> newRole(name, roleDescription));
+    }
+
+    @Override
     public Optional<ApplicationRole> findByName(final String name) {
         if(name == null) {
             return Optional.empty();
@@ -74,7 +80,7 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository<
 
     @Override
     public Collection<ApplicationRole> findNameContaining(final String search) {
-        
+
         if(search != null && search.length() > 0) {
             String nameRegex = String.format("(?i).*%s.*", search.replace("*", ".*").replace("?", "."));
             return repository.allMatches(
@@ -117,20 +123,20 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository<
 
     @Override
     public void addRoleToUser(
-            org.apache.isis.extensions.secman.api.role.ApplicationRole genericRole, 
+            org.apache.isis.extensions.secman.api.role.ApplicationRole genericRole,
             org.apache.isis.extensions.secman.api.user.ApplicationUser genericUser) {
-        
+
         val role = _Casts.<ApplicationRole>uncheckedCast(genericRole);
         val user = _Casts.<ApplicationUser>uncheckedCast(genericUser);
         // no need to add to users set, since will be done by JDO/DN.
         user.getRoles().add(role);
     }
-    
+
     @Override
     public void removeRoleFromUser(
             org.apache.isis.extensions.secman.api.role.ApplicationRole genericRole,
             org.apache.isis.extensions.secman.api.user.ApplicationUser genericUser) {
-        
+
         val role = _Casts.<ApplicationRole>uncheckedCast(genericRole);
         val user = _Casts.<ApplicationUser>uncheckedCast(genericUser);
         // no need to remove from users set, since will be done by JDO/DN.
@@ -145,9 +151,9 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRoleRepository<
 
     @Override
     public void deleteRole(org.apache.isis.extensions.secman.api.role.ApplicationRole genericRole) {
-        
+
         val role = _Casts.<ApplicationRole>uncheckedCast(genericRole);
-        
+
         role.getUsers().clear();
         val permissions = role.getPermissions();
         for (val permission : permissions) {
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
index 4e5ad4a..67642da 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/seed/scripts/AbstractRoleAndPermissionsFixtureScript.java
@@ -35,7 +35,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
 
     @Inject private ApplicationRoleRepository applicationRoleRepository;
     @Inject private ApplicationPermissionRepository applicationPermissionRepository;
-    
+
     private final String roleName;
     private final String roleDescription;
 
@@ -66,12 +66,10 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
             return;
         }
 
-        ApplicationRole securityRole = applicationRoleRepository.findByName(roleName).orElse(null);
-        if(securityRole == null) {
-            securityRole = applicationRoleRepository.newRole(roleName, roleDescription);
-        }
-        
-        for(ApplicationFeatureId featureId : featureIds) {
+        val securityRole = applicationRoleRepository.findByName(roleName)
+                .orElseGet(() -> applicationRoleRepository.newRole(roleName, roleDescription));
+
+        for(val featureId : featureIds) {
             val featureFqn = featureId.getFullyQualifiedName();
 
             // can't use role#addPackage because that does a check for existence of the package, which is
@@ -82,7 +80,7 @@ public abstract class AbstractRoleAndPermissionsFixtureScript extends FixtureScr
                     (org.apache.isis.extensions.secman.jdo.dom.role.ApplicationRole)securityRole,
                     rule,
                     mode,
-                    featureId.getSort(), 
+                    featureId.getSort(),
                     featureFqn);
         }
     }
diff --git a/extensions/security/secman/persistence-jpa/pom.xml b/extensions/security/secman/persistence-jpa/pom.xml
index d6b04de..22b7181 100644
--- a/extensions/security/secman/persistence-jpa/pom.xml
+++ b/extensions/security/secman/persistence-jpa/pom.xml
@@ -34,36 +34,33 @@
     <properties>
         <jar-plugin.automaticModuleName>org.apache.isis.extensions.secman.persistence.jpa</jar-plugin.automaticModuleName>
         <git-plugin.propertiesDir>org/apache/isis/extensions/secman/persistence/jpa</git-plugin.propertiesDir>
-        
+
     </properties>
 
 
     <dependencies>
-	
+
 		<dependency>
-			<groupId>org.apache.isis.persistence</groupId>
-			<artifactId>isis-persistence-jpa-applib</artifactId>
-			<scope>provided</scope>
+			<groupId>org.apache.isis.extensions</groupId>
+			<artifactId>isis-extensions-secman-api</artifactId>
 		</dependency>
-		
 		<dependency>
-			<groupId>org.apache.isis.core</groupId>
-			<artifactId>isis-core-runtime</artifactId>
-			<scope>provided</scope>
+			<groupId>org.apache.isis.extensions</groupId>
+			<artifactId>isis-extensions-secman-model</artifactId>
 		</dependency>
-		
+
 		<dependency>
-			<groupId>org.apache.isis.extensions</groupId>
-			<artifactId>isis-extensions-secman-api</artifactId>
+			<groupId>org.apache.isis.persistence</groupId>
+			<artifactId>isis-persistence-jpa-applib</artifactId>
 			<scope>provided</scope>
 		</dependency>
-		
+
 		<dependency>
-			<groupId>org.apache.isis.extensions</groupId>
-			<artifactId>isis-extensions-secman-model</artifactId>
+			<groupId>org.apache.isis.core</groupId>
+			<artifactId>isis-core-runtime</artifactId>
 			<scope>provided</scope>
 		</dependency>
-		
+
 		<dependency>
 			<groupId>org.apache.isis.testing</groupId>
 			<artifactId>isis-testing-fixtures-applib</artifactId>
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 6fe1ec0..6d79bae 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
@@ -31,24 +31,29 @@ import org.apache.isis.extensions.secman.jpa.dom.tenancy.ApplicationTenancyRepos
 import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUser;
 import org.apache.isis.extensions.secman.jpa.dom.user.ApplicationUserRepository;
 import org.apache.isis.extensions.secman.jpa.seed.SeedSecurityModuleService;
+import org.apache.isis.extensions.secman.model.IsisModuleExtSecmanModel;
 
 /**
  * @since 2.0 {@index}
  */
 @Configuration
 @Import({
+    // modules
+    IsisModuleExtSecmanModel.class,
+
+    // services
     ApplicationPermissionRepository.class,
     ApplicationRoleRepository.class,
     ApplicationTenancyRepository.class,
     ApplicationUserRepository.class,
-
-    ApplicationPermission.class,
-    ApplicationRole.class,
-    ApplicationTenancy.class,
-    ApplicationUser.class,
-
     SeedSecurityModuleService.class,
 
+    // pretty sure we don't need to import/register these view models
+//    ApplicationPermission.class,
+//    ApplicationRole.class,
+//    ApplicationTenancy.class,
+//    ApplicationUser.class,
+
 })
 @EntityScan(basePackageClasses = {
         ApplicationPermission.class,