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