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/06/01 07:07:12 UTC
[isis-app-helloworld] 01/04: Merge branch 'jdo-SNAPSHOT-secman'
into jpa-SNAPSHOT-secman
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch jpa-SNAPSHOT-secman
in repository https://gitbox.apache.org/repos/asf/isis-app-helloworld.git
commit 2764ce86c593d4bf3377670ed4a231ce0316a446
Merge: 3558e85 3580ca7
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon May 24 09:01:52 2021 +0100
Merge branch 'jdo-SNAPSHOT-secman' into jpa-SNAPSHOT-secman
pom.xml | 37 ++++++++++++
.../domainapp/modules/hello/HelloWorldModule.java | 7 ++-
.../modules/hello/dom/hwo/HelloWorldObject.java | 24 ++++++--
.../dom/hwo/HelloWorldObject_isis2619Prop.java | 17 ++++++
.../modules/hello/dom/hwo/HelloWorldObjects.java | 21 ++++++-
.../modules/hello/fixture/DemoFixture.java | 39 ++++++++++++
.../java/domainapp/modules/hello/types/AtPath.java | 25 ++++++++
.../java/domainapp/security/SeedUsersAndRoles.java | 65 ++++++++++++++++++++
.../fixturescripts/FixtureScriptSpecProvider.java | 14 +++++
.../ApplicationTenancyEvaluatorUsingAtPath.java | 69 ++++++++++++++++++++++
.../security/scripts/RoleAndPerms__NoDelete.java | 26 ++++++++
.../scripts/RoleAndPerms__NoIsis2619Prop.java | 25 ++++++++
.../security/scripts/RoleAndPerms__UserRo.java | 32 ++++++++++
.../security/scripts/RoleAndPerms__UserRw.java | 25 ++++++++
.../java/domainapp/security/scripts/Tenancies.java | 33 +++++++++++
.../security/scripts/UserToRole__bob_UserRw.java | 28 +++++++++
.../security/scripts/UserToRole__dick_UserRo.java | 20 +++++++
...e__joe_UserRw_but_NoDelete_or_isis2619Prop.java | 25 ++++++++
src/main/java/domainapp/webapp/AppManifest.java | 49 +++++++++++++++
src/main/resources/config/application.properties | 3 +
src/main/resources/menubars.layout.xml | 34 +++++++++++
src/main/resources/shiro.ini | 37 ++----------
22 files changed, 615 insertions(+), 40 deletions(-)
diff --cc src/main/java/domainapp/modules/hello/HelloWorldModule.java
index 7a5b3fe,be27bff..2e5dc86
--- a/src/main/java/domainapp/modules/hello/HelloWorldModule.java
+++ b/src/main/java/domainapp/modules/hello/HelloWorldModule.java
@@@ -4,16 -3,15 +4,21 @@@ import org.springframework.boot.autocon
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
+import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
+ import domainapp.modules.hello.fixture.DemoFixture;
+
@Configuration
- @Import({})
+ @Import({
+
+ DemoFixture.class
+ })
@ComponentScan
+@EnableJpaRepositories
+@EntityScan(
+ basePackageClasses = {
+ HelloWorldModule.class
+})
public class HelloWorldModule {
}
diff --cc src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java
index eb48032,df7378d..16dcf72
--- a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java
+++ b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObject.java
@@@ -15,37 -18,33 +15,40 @@@ import org.apache.isis.applib.annotatio
import org.apache.isis.applib.services.message.MessageService;
import org.apache.isis.applib.services.repository.RepositoryService;
import org.apache.isis.applib.services.title.TitleService;
+import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPointResolver;
+ import org.apache.isis.extensions.secman.api.tenancy.dom.HasAtPath;
+ import domainapp.modules.hello.types.AtPath;
import domainapp.modules.hello.types.Name;
import domainapp.modules.hello.types.Notes;
-@javax.jdo.annotations.PersistenceCapable(identityType = IdentityType.DATASTORE, schema = "hello" )
-@javax.jdo.annotations.DatastoreIdentity(strategy = IdGeneratorStrategy.IDENTITY, column = "id")
-@javax.jdo.annotations.Queries(
- @javax.jdo.annotations.Query(
- name = "findByName",
- value = "SELECT " +
- "FROM domainapp.modules.hello.dom.hwo.HelloWorldObject " +
- "WHERE name.indexOf(:name) >= 0"
- )
+@javax.persistence.Entity
+@javax.persistence.Table(
+ schema="hello",
+ uniqueConstraints = {
+ @javax.persistence.UniqueConstraint(name = "HelloWorldObject_name_UNQ", columnNames = {"name"})
+ }
)
-@javax.jdo.annotations.Version(strategy= VersionStrategy.DATE_TIME, column ="version")
-@javax.jdo.annotations.Unique(name="HelloWorldObject_name_UNQ", members = {"name"})
-@DomainObject(entityChangePublishing = Publishing.ENABLED)
+@javax.persistence.EntityListeners(JpaEntityInjectionPointResolver.class) // injection support
+@DomainObject(objectType = "hello.HelloWorldObject", entityChangePublishing = Publishing.ENABLED)
@DomainObjectLayout() // causes UI events to be triggered
- public class HelloWorldObject implements Comparable<HelloWorldObject> {
+ public class HelloWorldObject implements Comparable<HelloWorldObject>, HasAtPath {
- public HelloWorldObject(){}
+ protected HelloWorldObject(){}
+
+ @javax.persistence.Id
+ @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.AUTO)
+ @javax.persistence.Column(nullable = false)
+ private Long id;
+
+ @javax.persistence.Version
+ @javax.persistence.Column(name = "OPTLOCK")
+ private int version;
+
- public HelloWorldObject(final String name) {
+ public HelloWorldObject(final String name, final String atPath) {
this.name = name;
+ this.atPath = atPath;
}
public String title() {
@@@ -78,10 -75,19 +81,23 @@@
this.notes = notes;
}
+
++ @javax.persistence.Column(length = AtPath.MAX_LEN, nullable = true)
++ private String atPath;
++
+ @AtPath
+ @PropertyLayout(fieldSetId = "metadata", sequence = "3")
- private String atPath;
+ public String getAtPath() {
+ return atPath;
+ }
+ public void setAtPath(String atPath) {
+ this.atPath = atPath;
+ }
+
++
@Action(
- semantics = SemanticsOf.IDEMPOTENT,
- executionPublishing = Publishing.ENABLED
+ executionPublishing = Publishing.ENABLED,
+ semantics = SemanticsOf.IDEMPOTENT
)
@ActionLayout(
associateWith = "name",
diff --cc src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObjects.java
index 0231d8f,3a16897..f12af6e
--- a/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObjects.java
+++ b/src/main/java/domainapp/modules/hello/dom/hwo/HelloWorldObjects.java
@@@ -11,8 -12,13 +12,12 @@@ import org.apache.isis.applib.annotatio
import org.apache.isis.applib.annotation.PromptStyle;
import org.apache.isis.applib.annotation.RestrictTo;
import org.apache.isis.applib.annotation.SemanticsOf;
-import org.apache.isis.applib.query.Query;
import org.apache.isis.applib.services.repository.RepositoryService;
+ import org.apache.isis.extensions.secman.api.tenancy.dom.ApplicationTenancy;
+ import org.apache.isis.extensions.secman.api.tenancy.dom.ApplicationTenancyRepository;
+ import org.apache.isis.extensions.secman.api.user.menu.MeService;
+ import domainapp.modules.hello.types.AtPath;
import domainapp.modules.hello.types.Name;
@DomainService(
@@@ -51,8 -66,11 +65,11 @@@ public class HelloWorldObjects
@Action(semantics = SemanticsOf.SAFE, restrictTo = RestrictTo.PROTOTYPING)
public List<HelloWorldObject> listAll() {
- return repositoryService.allInstances(HelloWorldObject.class);
+ return helloWorldRepository.findAll();
}
- @Inject MeService meService;
- @Inject ApplicationTenancyRepository applicationTenancyRepository;
++ @Inject transient MeService meService;
++ @Inject transient ApplicationTenancyRepository applicationTenancyRepository;
+
}
diff --cc src/main/java/domainapp/modules/hello/types/AtPath.java
index 0000000,550678c..f6542df
mode 000000,100644..100644
--- a/src/main/java/domainapp/modules/hello/types/AtPath.java
+++ b/src/main/java/domainapp/modules/hello/types/AtPath.java
@@@ -1,0 -1,26 +1,25 @@@
+ package domainapp.modules.hello.types;
+
+ 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.annotation.Editing;
+ 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.Property;
+ import org.apache.isis.applib.annotation.PropertyLayout;
+
-@javax.jdo.annotations.Column(length = AtPath.MAX_LEN, allowsNull = "false")
+ @Property(editing = Editing.DISABLED, maxLength = AtPath.MAX_LEN, optionality = Optionality.MANDATORY)
+ @PropertyLayout()
+ @Parameter(maxLength = AtPath.MAX_LEN, optionality = Optionality.MANDATORY)
+ @ParameterLayout()
+ @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
+ @Retention(RetentionPolicy.RUNTIME)
+ public @interface AtPath {
+
+ int MAX_LEN = 50;
+
+ }
diff --cc src/main/java/domainapp/webapp/AppManifest.java
index 87a5213,0625975..655728d
--- a/src/main/java/domainapp/webapp/AppManifest.java
+++ b/src/main/java/domainapp/webapp/AppManifest.java
@@@ -7,8 -10,18 +10,18 @@@ import org.springframework.context.anno
import org.apache.isis.core.config.presets.IsisPresets;
import org.apache.isis.core.runtimeservices.IsisModuleCoreRuntimeServices;
+import org.apache.isis.persistence.jpa.eclipselink.IsisModuleJpaEclipselink;
+ import org.apache.isis.extensions.secman.api.SecmanConfiguration;
+ import org.apache.isis.extensions.secman.api.SecurityRealm;
+ import org.apache.isis.extensions.secman.api.SecurityRealmCharacteristic;
+ import org.apache.isis.extensions.secman.api.SecurityRealmService;
+ import org.apache.isis.extensions.secman.api.permission.spi.PermissionsEvaluationService;
+ import org.apache.isis.extensions.secman.api.permission.spi.PermissionsEvaluationServiceAllowBeatsVeto;
+ import org.apache.isis.extensions.secman.encryption.jbcrypt.IsisModuleExtSecmanEncryptionJbcrypt;
+ import org.apache.isis.extensions.secman.jdo.IsisModuleExtSecmanPersistenceJdo;
+ import org.apache.isis.extensions.secman.shiro.IsisModuleExtSecmanRealmShiro;
-import org.apache.isis.persistence.jdo.datanucleus.IsisModuleJdoDatanucleus;
import org.apache.isis.security.shiro.IsisModuleSecurityShiro;
+ import org.apache.isis.testing.fixtures.applib.IsisModuleTestingFixturesApplib;
import org.apache.isis.testing.h2console.ui.IsisModuleTestingH2ConsoleUi;
import org.apache.isis.viewer.restfulobjects.jaxrsresteasy4.IsisModuleViewerRestfulObjectsJaxrsResteasy4;
import org.apache.isis.viewer.wicket.viewer.IsisModuleViewerWicketViewer;
diff --cc src/main/resources/config/application.properties
index 1593d38,986e09d..bbfe01b
--- a/src/main/resources/config/application.properties
+++ b/src/main/resources/config/application.properties
@@@ -7,5 -7,13 +7,8 @@@
# See also /application.yml
#
-
-# note that properties under 'datanucleus' must use camelCase rather than kebab-case
-
-datanucleus.schema.autoCreateAll=true
-
spring.datasource.platform=h2
spring.datasource.url=jdbc:h2:mem:helloworld
+
+
+ isis.testing.fixtures.initial-script=domainapp.modules.hello.fixture.DemoFixture