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/05/24 16:02:07 UTC

[isis] 01/02: ISIS-2672: moves appfeature vms from secman and into applib.

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 7f5016f526591b855a77eb50a191948f7ff3f748
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon May 24 16:52:51 2021 +0100

    ISIS-2672: moves appfeature vms from secman and into applib.
    
    placed under 'isis.feat' namespace.
---
 .../org/apache/isis/applib/IsisModuleApplib.java   |  20 +++-
 .../services/appfeatui/ApplicationFeatureMenu.java |  29 +++--
 .../appfeatui}/ApplicationFeatureViewModel.java    |  40 ++-----
 ...ApplicationFeatureViewModel.layout.fallback.xml |  32 +++--
 .../services/appfeatui}/ApplicationNamespace.java  |  10 +-
 .../services/appfeatui}/ApplicationType.java       |   9 +-
 .../services/appfeatui}/ApplicationTypeAction.java |   9 +-
 .../appfeatui}/ApplicationTypeCollection.java      |   9 +-
 .../services/appfeatui}/ApplicationTypeMember.java |   9 +-
 .../appfeatui}/ApplicationTypeProperty.java        |  14 ++-
 .../adoc/modules/secman/pages/setting-up.adoc      |   4 +
 .../secman/api/IsisModuleExtSecmanApi.java         |  24 ++--
 .../extensions/secman/api/SecmanConfiguration.java |   1 +
 .../{dom => api}/ApplicationFeatureChoices.java    |   2 +-
 .../ApplicationFeatureViewModel_permissions.java   |  55 +++++++++
 .../dom/ApplicationNamespace.layout.fallback.xml   | 131 ---------------------
 .../dom/ApplicationTypeAction.layout.fallback.xml  | 131 ---------------------
 .../ApplicationTypeCollection.layout.fallback.xml  | 131 ---------------------
 .../dom/ApplicationTypeMember.layout.fallback.xml  | 131 ---------------------
 .../ApplicationTypeProperty.layout.fallback.xml    | 131 ---------------------
 .../dom/mixins/ApplicationPermission_feature.java  |   2 +-
 .../dom/mixins/ApplicationRole_addPermission.java  |   4 +-
 .../perms/ApplicationUser_filterPermissions.java   |   4 +-
 .../dom/mixins/perms/UserPermissionViewModel.java  |   2 +-
 .../other/IsisAppFeatureRoleAndPermissions.java    |  67 +++++++++++
 25 files changed, 246 insertions(+), 755 deletions(-)

diff --git a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
index c3bf6a7..1f0b395 100644
--- a/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/IsisModuleApplib.java
@@ -30,6 +30,13 @@ import org.apache.isis.applib.mixins.metamodel.Object_rebuildMetamodel;
 import org.apache.isis.applib.mixins.metamodel.Object_downloadMetamodelXml;
 import org.apache.isis.applib.mixins.metamodel.Object_objectIdentifier;
 import org.apache.isis.applib.mixins.metamodel.Object_objectType;
+import org.apache.isis.applib.services.appfeatui.ApplicationFeatureMenu;
+import org.apache.isis.applib.services.appfeatui.ApplicationNamespace;
+import org.apache.isis.applib.services.appfeatui.ApplicationType;
+import org.apache.isis.applib.services.appfeatui.ApplicationTypeAction;
+import org.apache.isis.applib.services.appfeatui.ApplicationTypeCollection;
+import org.apache.isis.applib.services.appfeatui.ApplicationTypeMember;
+import org.apache.isis.applib.services.appfeatui.ApplicationTypeProperty;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder_lookup;
 import org.apache.isis.applib.services.bookmark.BookmarkHolder_object;
 import org.apache.isis.applib.services.commanddto.conmap.ContentMappingServiceForCommandDto;
@@ -69,6 +76,15 @@ import org.apache.isis.schema.IsisModuleSchema;
         Object_openRestApi.class,
         Object_rebuildMetamodel.class,
 
+        // -- ViewModels
+        // TODO: not sure we need to register view models?
+        ApplicationNamespace.class,
+        ApplicationType.class,
+        ApplicationTypeAction.class,
+        ApplicationTypeCollection.class,
+        ApplicationTypeMember.class,
+        ApplicationTypeProperty.class,
+
         // @DomainObject(s)
         ConfigurationProperty.class,
         DomainObjectList.class,
@@ -80,6 +96,7 @@ import org.apache.isis.schema.IsisModuleSchema;
         LayoutServiceMenu.class,
         ImpersonateMenu.class,
         MetaModelServiceMenu.class,
+        ApplicationFeatureMenu.class,
 
         // @Service(s)
         CommandDtoProcessorServiceIdentity.class,
@@ -96,7 +113,8 @@ public class IsisModuleApplib {
 
     public static final String NAMESPACE = "isis.applib";
     public static final String NAMESPACE_CONF = "isis.conf";    // for configuration; to minimize the risk of granting perms accidentally
-    public static final String NAMESPACE_SUDO = "isis.sudo";    // for configuration; to minimize the risk of granting perms accidentally
+    public static final String NAMESPACE_SUDO = "isis.sudo";    // for impersonation
+    public static final String NAMESPACE_FEAT = "isis.feat";    // for app features
 
     // -- UI EVENT CLASSES
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModels.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureMenu.java
similarity index 88%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModels.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureMenu.java
index a01067b..d1604b4 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModels.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureMenu.java
@@ -16,13 +16,14 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.applib.services.appfeatui;
 
 import java.util.Collection;
 import java.util.List;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.DomainService;
@@ -35,28 +36,31 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
+/**
+ * @since 2.x  {@index}
+ */
 @DomainService(
         nature = NatureOfService.VIEW,
-        objectType = ApplicationFeatureViewModels.OBJECT_TYPE
+        objectType = ApplicationFeatureMenu.OBJECT_TYPE
 )
 @DomainServiceLayout(
-        named="Security",
+        named = "Prototyping",
         menuBar = DomainServiceLayout.MenuBar.SECONDARY
 )
-public class ApplicationFeatureViewModels  {
+public class ApplicationFeatureMenu {
 
-    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationFeatureViewModels";
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationFeatureMenu";
 
     public static abstract class PropertyDomainEvent<T>
-    extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationFeatureViewModels, T> {}
+    extends IsisModuleApplib.PropertyDomainEvent<ApplicationFeatureMenu, T> {}
 
     public static abstract class CollectionDomainEvent<T>
-    extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationFeatureViewModels, T> {}
+    extends IsisModuleApplib.CollectionDomainEvent<ApplicationFeatureMenu, T> {}
 
     public static abstract class ActionDomainEvent
-    extends IsisModuleExtSecmanApi.ActionDomainEvent<ApplicationFeatureViewModels> {}
+    extends IsisModuleApplib.ActionDomainEvent<ApplicationFeatureMenu> {}
+
 
     // -- ICON NAME
 
@@ -64,6 +68,7 @@ public class ApplicationFeatureViewModels  {
         return "applicationFeature";
     }
 
+
     // -- ALL PACKAGES
 
     public static class AllNamespacesDomainEvent extends ActionDomainEvent {}
@@ -79,7 +84,8 @@ public class ApplicationFeatureViewModels  {
         return asViewModels(featureRepository.allNamespaces(), ApplicationNamespace.class);
     }
 
-    // -- ALL CLASSES
+
+    // -- ALL TYPES
 
     public static class AllTypesDomainEvent extends ActionDomainEvent {}
 
@@ -94,6 +100,7 @@ public class ApplicationFeatureViewModels  {
         return asViewModels(featureRepository.allTypes(), ApplicationType.class);
     }
 
+
     // -- ALL ACTIONS
 
     public static class AllActionsDomainEvent extends ActionDomainEvent {}
@@ -109,6 +116,7 @@ public class ApplicationFeatureViewModels  {
         return asViewModels(featureRepository.allActions(), ApplicationTypeAction.class);
     }
 
+
     // -- ALL PROPERTIES
 
     public static class AllPropertiesDomainEvent extends ActionDomainEvent {}
@@ -124,6 +132,7 @@ public class ApplicationFeatureViewModels  {
         return asViewModels(featureRepository.allProperties(), ApplicationTypeProperty.class);
     }
 
+
     // -- ALL COLLECTIONS
 
     public static class AllCollectionsDomainEvent extends ActionDomainEvent {}
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModel.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.java
similarity index 89%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModel.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.java
index 985622a..c36281c 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureViewModel.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.applib.services.appfeatui;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -28,9 +28,8 @@ import java.util.function.Function;
 
 import javax.inject.Inject;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.ViewModel;
-import org.apache.isis.applib.annotation.Collection;
-import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.Navigable;
 import org.apache.isis.applib.annotation.Parameter;
@@ -50,9 +49,6 @@ import org.apache.isis.applib.util.ObjectContracts;
 import org.apache.isis.applib.util.ToString;
 import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.commons.internal.collections._Lists;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
-import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission;
-import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRepository;
 
 import lombok.Getter;
 import lombok.NonNull;
@@ -61,21 +57,22 @@ import lombok.val;
 
 /**
  * View model identified by {@link ApplicationFeatureId} and backed by an {@link ApplicationFeature}.
+ *
+ * @since 2.x  {@index}
  */
 @DomainObject(
         objectType = ApplicationFeatureViewModel.OBJECT_TYPE
 )
 public abstract class ApplicationFeatureViewModel implements ViewModel {
 
-    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationFeatureViewModel";
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationFeatureViewModel";
 
-    public static abstract class PropertyDomainEvent<S extends ApplicationFeatureViewModel,T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<S, T> {}
-    public static abstract class CollectionDomainEvent<S extends ApplicationFeatureViewModel,T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<S, T> {}
-    public static abstract class ActionDomainEvent<S extends ApplicationFeatureViewModel> extends IsisModuleExtSecmanApi.ActionDomainEvent<S> {}
+    public static abstract class PropertyDomainEvent<S extends ApplicationFeatureViewModel,T> extends IsisModuleApplib.PropertyDomainEvent<S, T> {}
+    public static abstract class CollectionDomainEvent<S extends ApplicationFeatureViewModel,T> extends IsisModuleApplib.CollectionDomainEvent<S, T> {}
+    public static abstract class ActionDomainEvent<S extends ApplicationFeatureViewModel> extends IsisModuleApplib.ActionDomainEvent<S> {}
 
     @Inject private FactoryService factory;
     @Inject private ApplicationFeatureRepository featureRepository;
-    @Inject private ApplicationPermissionRepository applicationPermissionRepository;
 
 
     // -- constructors
@@ -335,27 +332,6 @@ public abstract class ApplicationFeatureViewModel implements ViewModel {
     }
 
 
-    // -- permissions (collection)
-
-    @Collection(
-            domainEvent = Permissions.DomainEvent.class
-    )
-    @CollectionLayout(
-            defaultView = "table",
-            sequence = "10"
-    )
-    @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
-    @Retention(RetentionPolicy.RUNTIME)
-    public @interface Permissions {
-
-        class DomainEvent extends CollectionDomainEvent<ApplicationFeatureViewModel, ApplicationPermission> {}
-    }
-
-    @Permissions
-    public java.util.Collection<? extends ApplicationPermission> getPermissions() {
-        return applicationPermissionRepository.findByFeatureCached(getFeatureId());
-    }
-
 
     // -- parentPackage (property, programmatic, for packages & classes only)
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.layout.fallback.xml b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.layout.fallback.xml
similarity index 93%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.layout.fallback.xml
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.layout.fallback.xml
index e865ea9..c9765b5 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.layout.fallback.xml
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationFeatureViewModel.layout.fallback.xml
@@ -52,40 +52,48 @@ under the License.
                     </bs3:row>
                 </bs3:tab>
             </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
             <bs3:tabGroup collapseIfOne="false">
-                <bs3:tab name="Hierarchy">
+                <bs3:tab name="Detail">
                     <bs3:row>
                         <bs3:col span="12">
-                            <cpt:fieldSet name="Parent" id="parent"/>
+                            <cpt:fieldSet name="Detail" id="detail"/>
                         </bs3:col>
                     </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Data type">
                     <bs3:row>
                         <bs3:col span="12">
-                            <cpt:collection id="contents"/>
+                            <cpt:fieldSet name="Data Type" id="dataType"/>
+                        </bs3:col>
+                    </bs3:row>
+                </bs3:tab>
+                <bs3:tab name="Contributed">
+                    <bs3:row>
+                        <bs3:col span="12">
+                            <cpt:fieldSet name="Contributed" id="contributed"/>
                         </bs3:col>
                     </bs3:row>
                 </bs3:tab>
             </bs3:tabGroup>
         </bs3:col>
         <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Detail">
+            <bs3:tabGroup collapseIfOne="false">
+                <bs3:tab name="Hierarchy">
                     <bs3:row>
                         <bs3:col span="12">
-                            <cpt:fieldSet name="Detail" id="detail"/>
-                            <cpt:fieldSet name="Data Type" id="dataType"/>
+                            <cpt:fieldSet name="Parent" id="parent"/>
                         </bs3:col>
                     </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Contributed">
                     <bs3:row>
                         <bs3:col span="12">
-                            <cpt:fieldSet name="Contributed" id="contributed"/>
+                            <cpt:collection id="contents"/>
                         </bs3:col>
                     </bs3:row>
                 </bs3:tab>
+            </bs3:tabGroup>
+        </bs3:col>
+        <bs3:col span="4">
+            <bs3:tabGroup collapseIfOne="false">
                 <bs3:tab name="Permissions">
                     <bs3:row>
                         <bs3:col span="12">
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationNamespace.java
similarity index 90%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationNamespace.java
index 4c8c326..1580da3 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationNamespace.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.applib.services.appfeatui;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -25,21 +25,25 @@ import java.lang.annotation.Target;
 import java.util.List;
 import java.util.SortedSet;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
+import org.apache.isis.applib.services.appfeat.ApplicationFeature;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureSort;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
+/**
+ * @since 2.x  {@index}
+ */
 @DomainObject(
         objectType = ApplicationNamespace.OBJECT_TYPE
 )
 @DomainObjectLayout(paged=100)
 public class ApplicationNamespace extends ApplicationFeatureViewModel {
 
-    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationNamespace";
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationNamespace";
 
     public static abstract class CollectionDomainEvent<T> extends ApplicationFeatureViewModel.CollectionDomainEvent<ApplicationNamespace, T> {}
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationType.java
similarity index 94%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationType.java
index ec369e6..d1a62b6 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationType.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationType.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.applib.services.appfeatui;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
@@ -25,14 +25,17 @@ import java.lang.annotation.Target;
 import java.util.List;
 import java.util.SortedSet;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
+/**
+ * @since 2.x  {@index}
+ */
 @DomainObject(
         objectType = ApplicationType.OBJECT_TYPE
 )
@@ -42,7 +45,7 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 )
 public class ApplicationType extends ApplicationFeatureViewModel {
 
-    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationType";
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationType";
 
     public static abstract class CollectionDomainEvent<T>
             extends ApplicationFeatureViewModel.CollectionDomainEvent<ApplicationType, T> {}
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeAction.java
similarity index 93%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeAction.java
index 53beb99..649bf6f 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeAction.java
@@ -16,21 +16,24 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.applib.services.appfeatui;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
+/**
+ * @since 2.x  {@index}
+ */
 @DomainObject(
         objectType = ApplicationTypeAction.OBJECT_TYPE
 )
@@ -39,7 +42,7 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 )
 public class ApplicationTypeAction extends ApplicationTypeMember {
 
-    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTypeAction";
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationTypeAction";
 
     public static abstract class PropertyDomainEvent<T> extends ApplicationTypeMember.PropertyDomainEvent<ApplicationTypeAction, T> {}
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeCollection.java
similarity index 93%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeCollection.java
index bad7cc8..86b576c 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeCollection.java
@@ -16,19 +16,22 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.applib.services.appfeatui;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
+/**
+ * @since 2.x  {@index}
+ */
 @DomainObject(
         objectType = ApplicationTypeCollection.OBJECT_TYPE
 )
@@ -37,7 +40,7 @@ import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 )
 public class ApplicationTypeCollection extends ApplicationTypeMember {
 
-    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTypeCollection";
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationTypeCollection";
 
     public static abstract class PropertyDomainEvent<T> extends ApplicationTypeMember.PropertyDomainEvent<ApplicationTypeCollection, T> {}
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeMember.java
similarity index 91%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeMember.java
index adaa5b9..c011a62 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeMember.java
@@ -16,23 +16,26 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.applib.services.appfeatui;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 import lombok.NoArgsConstructor;
 
+/**
+ * @since 2.x  {@index}
+ */
 @DomainObject(
         objectType = ApplicationTypeMember.OBJECT_TYPE
 )
@@ -42,7 +45,7 @@ import lombok.NoArgsConstructor;
 @NoArgsConstructor
 public abstract class ApplicationTypeMember extends ApplicationFeatureViewModel {
 
-    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTypeMember";
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationTypeMember";
 
     public static abstract class PropertyDomainEvent<S extends ApplicationTypeMember, T> extends ApplicationFeatureViewModel.PropertyDomainEvent<ApplicationTypeMember, T> {}
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.java b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeProperty.java
similarity index 94%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.java
rename to api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeProperty.java
index 7923447..66b523c 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.java
+++ b/api/applib/src/main/java/org/apache/isis/applib/services/appfeatui/ApplicationTypeProperty.java
@@ -16,30 +16,35 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.applib.services.appfeatui;
 
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 
+import org.apache.isis.applib.IsisModuleApplib;
 import org.apache.isis.applib.annotation.DomainObject;
 import org.apache.isis.applib.annotation.DomainObjectLayout;
 import org.apache.isis.applib.annotation.Optionality;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
 import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
-import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 
 import lombok.val;
 
+/**
+ * @since 2.x  {@index}
+ */
 @DomainObject(
         objectType = ApplicationTypeProperty.OBJECT_TYPE
 )
-@DomainObjectLayout(paged=100)
+@DomainObjectLayout(
+        paged = 100
+)
 public class ApplicationTypeProperty extends ApplicationTypeMember {
 
-    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationTypeProperty";
+    public static final String OBJECT_TYPE = IsisModuleApplib.NAMESPACE_FEAT + ".ApplicationTypeProperty";
 
     public static abstract class PropertyDomainEvent<T> extends ApplicationTypeMember.PropertyDomainEvent<ApplicationTypeProperty, T> {}
 
@@ -168,4 +173,3 @@ public class ApplicationTypeProperty extends ApplicationTypeMember {
     }
 
 }
-
diff --git a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
index 82e8f92..02d7b1e 100644
--- a/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
+++ b/extensions/security/secman/adoc/modules/secman/pages/setting-up.adoc
@@ -188,6 +188,10 @@ Access the configuration properties (from the tertiary menu))
 
 * Available only in prototype mode:
 
+** `IsisAppFeatureRoleAndPermissions.ROLE_NAME`
++
+Browse the application features + permissions (from the "Prototyping" menu).
+
 ** `IsisPersistenceJdoMetaModelRoleAndPermissions.ROLE_NAME`
 +
 Download the JDO metamodel (from the "Prototyping" menu).
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
index 86efc33..8165cad 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/IsisModuleExtSecmanApi.java
@@ -22,14 +22,8 @@ import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Import;
 
 import org.apache.isis.extensions.secman.api.authorizor.AuthorizorSecman;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationFeatureChoices;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationFeatureViewModels;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationNamespace;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationType;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationTypeAction;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationTypeCollection;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationTypeMember;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationTypeProperty;
+import org.apache.isis.extensions.secman.api.feature.api.ApplicationFeatureChoices;
+import org.apache.isis.extensions.secman.api.feature.contributions.ApplicationFeatureViewModel_permissions;
 import org.apache.isis.extensions.secman.api.permission.app.ApplicationOrphanedPermissionManager;
 import org.apache.isis.extensions.secman.api.permission.app.mixins.ApplicationOrphanedPermissionManager_relocateSelected;
 import org.apache.isis.extensions.secman.api.permission.dom.mixins.ApplicationPermission_allow;
@@ -92,7 +86,6 @@ import org.apache.isis.extensions.secman.api.user.menu.MeService;
         AuthorizorSecman.class,
 
         // @DomainService
-        ApplicationFeatureViewModels.class,
         ApplicationOrphanedPermissionManager.class,
         ApplicationPermissionMenu.class,
         ApplicationRoleMenu.class,
@@ -104,13 +97,6 @@ import org.apache.isis.extensions.secman.api.user.menu.MeService;
 
         // -- ViewModels
         // TODO: not sure we need to register view models?
-
-        ApplicationNamespace.class,
-        ApplicationType.class,
-        ApplicationTypeAction.class,
-        ApplicationTypeCollection.class,
-        ApplicationTypeMember.class,
-        ApplicationTypeProperty.class,
         ApplicationUserManager.class,
         UserPermissionViewModel.class,
         ApplicationOrphanedPermissionManager.class,
@@ -165,8 +151,14 @@ import org.apache.isis.extensions.secman.api.user.menu.MeService;
         ApplicationUser_updatePassword.class,
         ApplicationUser_updatePhoneNumber.class,
         ApplicationUser_updateUsername.class,
+
+        // ApplicationFeatureViewModel
+        ApplicationFeatureViewModel_permissions.class,
+
+        // HasUsername
         HasUsername_open.class,
 
+        // ApplicationUserManager
         ApplicationUserManager_allUsers.class,
         ApplicationUserManager_newDelegateUser.class,
         ApplicationUserManager_newLocalUser.class,
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
index d93282a..04aa1b3 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/SecmanConfiguration.java
@@ -141,6 +141,7 @@ public class SecmanConfiguration {
             IsisModuleCoreSecurity.NAMESPACE,
             IsisModuleApplib.NAMESPACE_SUDO,
             IsisModuleApplib.NAMESPACE_CONF,
+            IsisModuleApplib.NAMESPACE_FEAT,
             IsisModuleExtSecmanApi.NAMESPACE
     };
 
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureChoices.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/api/ApplicationFeatureChoices.java
similarity index 98%
rename from extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureChoices.java
rename to extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/api/ApplicationFeatureChoices.java
index 0cee19c..dd3431d 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationFeatureChoices.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/api/ApplicationFeatureChoices.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.extensions.secman.api.feature.dom;
+package org.apache.isis.extensions.secman.api.feature.api;
 
 import java.util.Collection;
 import java.util.Map;
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/contributions/ApplicationFeatureViewModel_permissions.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/contributions/ApplicationFeatureViewModel_permissions.java
new file mode 100644
index 0000000..4df5658
--- /dev/null
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/contributions/ApplicationFeatureViewModel_permissions.java
@@ -0,0 +1,55 @@
+/*
+ *  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.extensions.secman.api.feature.contributions;
+
+import javax.inject.Inject;
+
+import org.apache.isis.applib.IsisModuleApplib;
+import org.apache.isis.applib.annotation.Action;
+import org.apache.isis.applib.annotation.Collection;
+import org.apache.isis.applib.annotation.CollectionLayout;
+import org.apache.isis.applib.services.appfeatui.ApplicationFeatureViewModel;
+import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission;
+import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRepository;
+
+import lombok.RequiredArgsConstructor;
+
+@Collection(
+) @CollectionLayout(
+        defaultView = "table",
+        sequence = "10"
+)
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
+public class ApplicationFeatureViewModel_permissions {
+
+    private final ApplicationFeatureViewModel viewModel;
+
+    public static class ActionDomainEvent extends IsisModuleApplib.ActionDomainEvent<ApplicationFeatureViewModel_permissions> {}
+
+    @Inject private ApplicationPermissionRepository applicationPermissionRepository;
+
+    @Action(
+            domainEvent = ApplicationFeatureViewModel_permissions.ActionDomainEvent.class
+    )
+    public java.util.Collection<ApplicationPermission> coll() {
+        return applicationPermissionRepository.findByFeatureCached(viewModel.getFeatureId());
+    }
+
+
+}
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.layout.fallback.xml b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.layout.fallback.xml
deleted file mode 100644
index e865ea9..0000000
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationNamespace.layout.fallback.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-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.
--->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <bs3:row>
-        <bs3:col span="12" unreferencedActions="true">
-            <cpt:domainObject/>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Identity">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Identity" id="identity"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Other">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Metadata">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Metadata" id="metadata"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup collapseIfOne="false">
-                <bs3:tab name="Hierarchy">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Parent" id="parent"/>
-                        </bs3:col>
-                    </bs3:row>
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="contents"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Detail">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Detail" id="detail"/>
-                            <cpt:fieldSet name="Data Type" id="dataType"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Contributed">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Contributed" id="contributed"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Permissions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="permissions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup>
-                <bs3:tab name="Actions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="actions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Properties">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="properties"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Collections">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="collections"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup unreferencedCollections="true"/>
-        </bs3:col>
-    </bs3:row>
-</bs3:grid>
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.layout.fallback.xml b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.layout.fallback.xml
deleted file mode 100644
index e865ea9..0000000
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeAction.layout.fallback.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-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.
--->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <bs3:row>
-        <bs3:col span="12" unreferencedActions="true">
-            <cpt:domainObject/>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Identity">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Identity" id="identity"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Other">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Metadata">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Metadata" id="metadata"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup collapseIfOne="false">
-                <bs3:tab name="Hierarchy">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Parent" id="parent"/>
-                        </bs3:col>
-                    </bs3:row>
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="contents"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Detail">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Detail" id="detail"/>
-                            <cpt:fieldSet name="Data Type" id="dataType"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Contributed">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Contributed" id="contributed"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Permissions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="permissions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup>
-                <bs3:tab name="Actions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="actions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Properties">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="properties"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Collections">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="collections"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup unreferencedCollections="true"/>
-        </bs3:col>
-    </bs3:row>
-</bs3:grid>
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.layout.fallback.xml b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.layout.fallback.xml
deleted file mode 100644
index e865ea9..0000000
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeCollection.layout.fallback.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-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.
--->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <bs3:row>
-        <bs3:col span="12" unreferencedActions="true">
-            <cpt:domainObject/>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Identity">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Identity" id="identity"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Other">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Metadata">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Metadata" id="metadata"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup collapseIfOne="false">
-                <bs3:tab name="Hierarchy">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Parent" id="parent"/>
-                        </bs3:col>
-                    </bs3:row>
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="contents"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Detail">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Detail" id="detail"/>
-                            <cpt:fieldSet name="Data Type" id="dataType"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Contributed">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Contributed" id="contributed"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Permissions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="permissions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup>
-                <bs3:tab name="Actions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="actions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Properties">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="properties"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Collections">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="collections"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup unreferencedCollections="true"/>
-        </bs3:col>
-    </bs3:row>
-</bs3:grid>
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.layout.fallback.xml b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.layout.fallback.xml
deleted file mode 100644
index e865ea9..0000000
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeMember.layout.fallback.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-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.
--->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <bs3:row>
-        <bs3:col span="12" unreferencedActions="true">
-            <cpt:domainObject/>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Identity">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Identity" id="identity"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Other">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Metadata">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Metadata" id="metadata"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup collapseIfOne="false">
-                <bs3:tab name="Hierarchy">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Parent" id="parent"/>
-                        </bs3:col>
-                    </bs3:row>
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="contents"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Detail">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Detail" id="detail"/>
-                            <cpt:fieldSet name="Data Type" id="dataType"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Contributed">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Contributed" id="contributed"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Permissions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="permissions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup>
-                <bs3:tab name="Actions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="actions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Properties">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="properties"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Collections">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="collections"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup unreferencedCollections="true"/>
-        </bs3:col>
-    </bs3:row>
-</bs3:grid>
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.layout.fallback.xml b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.layout.fallback.xml
deleted file mode 100644
index e865ea9..0000000
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/feature/dom/ApplicationTypeProperty.layout.fallback.xml
+++ /dev/null
@@ -1,131 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-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.
--->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <bs3:row>
-        <bs3:col span="12" unreferencedActions="true">
-            <cpt:domainObject/>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Identity">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Identity" id="identity"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Other">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Metadata">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Metadata" id="metadata"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup collapseIfOne="false">
-                <bs3:tab name="Hierarchy">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Parent" id="parent"/>
-                        </bs3:col>
-                    </bs3:row>
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="contents"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Detail">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Detail" id="detail"/>
-                            <cpt:fieldSet name="Data Type" id="dataType"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Contributed">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Contributed" id="contributed"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Permissions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="permissions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup>
-                <bs3:tab name="Actions">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="actions"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Properties">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="properties"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Collections">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:collection id="collections"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup unreferencedCollections="true"/>
-        </bs3:col>
-    </bs3:row>
-</bs3:grid>
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_feature.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_feature.java
index 60a07d5..fa1f9f8 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_feature.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/mixins/ApplicationPermission_feature.java
@@ -28,7 +28,7 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.applib.services.repository.RepositoryService;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationFeatureViewModel;
+import org.apache.isis.applib.services.appfeatui.ApplicationFeatureViewModel;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission;
 
 import lombok.RequiredArgsConstructor;
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
index e56fc7a..324d82a 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/mixins/ApplicationRole_addPermission.java
@@ -24,14 +24,12 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.MinLength;
-import org.apache.isis.applib.annotation.Optionality;
-import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
 import org.apache.isis.applib.services.appfeat.ApplicationFeature;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationFeatureChoices;
+import org.apache.isis.extensions.secman.api.feature.api.ApplicationFeatureChoices;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRepository;
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
index cff2c5b..db64eac 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/ApplicationUser_filterPermissions.java
@@ -29,8 +29,6 @@ import org.apache.isis.applib.annotation.Action;
 import org.apache.isis.applib.annotation.ActionLayout;
 import org.apache.isis.applib.annotation.MemberSupport;
 import org.apache.isis.applib.annotation.MinLength;
-import org.apache.isis.applib.annotation.Optionality;
-import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.PromptStyle;
 import org.apache.isis.applib.annotation.SemanticsOf;
@@ -40,7 +38,7 @@ import org.apache.isis.applib.services.appfeat.ApplicationFeatureRepository;
 import org.apache.isis.applib.services.factory.FactoryService;
 import org.apache.isis.commons.internal.collections._Lists;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationFeatureChoices;
+import org.apache.isis.extensions.secman.api.feature.api.ApplicationFeatureChoices;
 import org.apache.isis.extensions.secman.api.user.dom.ApplicationUser;
 
 import lombok.RequiredArgsConstructor;
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/UserPermissionViewModel.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/UserPermissionViewModel.java
index 7d4ebfc..d7ce13a 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/UserPermissionViewModel.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/dom/mixins/perms/UserPermissionViewModel.java
@@ -50,7 +50,7 @@ import org.apache.isis.applib.util.ToString;
 import org.apache.isis.commons.internal.base._NullSafe;
 import org.apache.isis.commons.internal.base._Strings;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
-import org.apache.isis.extensions.secman.api.feature.dom.ApplicationFeatureViewModel;
+import org.apache.isis.applib.services.appfeatui.ApplicationFeatureViewModel;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRepository;
diff --git a/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisAppFeatureRoleAndPermissions.java b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisAppFeatureRoleAndPermissions.java
new file mode 100644
index 0000000..b2ec4f1
--- /dev/null
+++ b/extensions/security/secman/model/src/main/java/org/apache/isis/extensions/secman/model/seed/scripts/other/IsisAppFeatureRoleAndPermissions.java
@@ -0,0 +1,67 @@
+/*
+ *  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.extensions.secman.model.seed.scripts.other;
+
+import org.apache.isis.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.isis.applib.services.appfeatui.ApplicationFeatureMenu;
+import org.apache.isis.applib.services.appfeatui.ApplicationFeatureViewModel;
+import org.apache.isis.applib.services.appfeatui.ApplicationNamespace;
+import org.apache.isis.applib.services.appfeatui.ApplicationType;
+import org.apache.isis.applib.services.appfeatui.ApplicationTypeAction;
+import org.apache.isis.applib.services.appfeatui.ApplicationTypeCollection;
+import org.apache.isis.applib.services.appfeatui.ApplicationTypeMember;
+import org.apache.isis.applib.services.appfeatui.ApplicationTypeProperty;
+import org.apache.isis.applib.services.confview.ConfigurationMenu;
+import org.apache.isis.applib.services.confview.ConfigurationProperty;
+import org.apache.isis.applib.services.confview.ConfigurationViewmodel;
+import org.apache.isis.commons.collections.Can;
+import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionMode;
+import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRule;
+import org.apache.isis.extensions.secman.api.role.fixtures.AbstractRoleAndPermissionsFixtureScript;
+
+/**
+ * @since 2.0 {@index}
+ */
+public class IsisAppFeatureRoleAndPermissions
+extends AbstractRoleAndPermissionsFixtureScript {
+
+    public static final String ROLE_NAME = ApplicationFeatureMenu.OBJECT_TYPE.replace(".","-");
+
+    public IsisAppFeatureRoleAndPermissions() {
+        super(ROLE_NAME, "Access application features");
+    }
+
+    @Override
+    protected void execute(ExecutionContext executionContext) {
+        newPermissions(
+                ApplicationPermissionRule.ALLOW,
+                ApplicationPermissionMode.CHANGING,
+                Can.of(
+                        ApplicationFeatureId.newType(ApplicationFeatureMenu.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ApplicationFeatureViewModel.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ApplicationNamespace.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ApplicationType.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ApplicationTypeMember.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ApplicationTypeAction.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ApplicationTypeProperty.OBJECT_TYPE),
+                        ApplicationFeatureId.newType(ApplicationTypeCollection.OBJECT_TYPE)
+                        )
+        );
+    }
+}