You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2023/07/08 16:51:51 UTC
[causeway] 01/02: hacking
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a commit to branch CAUSEWAY-3524
in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 462d40087ad5ca3102d849a876a04ed69aaeb70c
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Sat Jul 8 12:32:33 2023 +0100
hacking
---
extensions/security/secman/integration/pom.xml | 7 +++
.../CausewayModuleExtSecmanIntegration.java | 4 +-
.../ApplicationFeatureIdTransformer.java | 16 ------
.../ApplicationFeatureIdTransformerIdentity.java | 66 ++++++++++++++++++++++
.../PermissionsEvaluationServiceForSecman.java | 14 +----
.../src/main/resources/META-INF/spring.factories | 3 +-
...icationFeatureIdTransformerV1Compatibility.java | 59 +++++++++++++++++++
...onFeatureIdTransformerV1Compatibility_Test.java | 47 +++++++++++++++
8 files changed, 186 insertions(+), 30 deletions(-)
diff --git a/extensions/security/secman/integration/pom.xml b/extensions/security/secman/integration/pom.xml
index 6977e5f0dd..82668509be 100644
--- a/extensions/security/secman/integration/pom.xml
+++ b/extensions/security/secman/integration/pom.xml
@@ -48,6 +48,13 @@
<scope>provided</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.causeway.testing</groupId>
+ <artifactId>causeway-testing-unittestsupport-applib</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+
</dependencies>
</project>
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/CausewayModuleExtSecmanIntegration.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/CausewayModuleExtSecmanIntegration.java
index b8c8bb0ef3..25ff15a256 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/CausewayModuleExtSecmanIntegration.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/CausewayModuleExtSecmanIntegration.java
@@ -18,7 +18,7 @@
*/
package org.apache.causeway.extensions.secman.integration;
-import org.apache.causeway.extensions.secman.integration.permissions.ApplicationFeatureIdTransformer;
+import org.apache.causeway.extensions.secman.integration.permissions.ApplicationFeatureIdTransformerIdentity;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
@@ -46,7 +46,7 @@ import org.apache.causeway.extensions.secman.integration.userreg.UserRegistratio
TableColumnVisibilityServiceForSecman.class,
ImpersonateMenuAdvisorForSecman.class, //not activated by default yet
PermissionsEvaluationServiceForSecman.class,
- ApplicationFeatureIdTransformer.Identity.class,
+ ApplicationFeatureIdTransformerIdentity.class,
UserRegistrationServiceForSecman.class,
UserMementoRefinerFromApplicationUser.class,
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformer.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformer.java
index a843a19710..ffbd3544bb 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformer.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformer.java
@@ -53,20 +53,4 @@ public interface ApplicationFeatureIdTransformer {
.collect(Collectors.toList());
}
- @Service
- @Priority(PriorityPrecedence.LATE)
- class Identity implements ApplicationFeatureIdTransformer {
-
- @Programmatic
- @Override
- public ApplicationFeatureId transform(ApplicationFeatureId applicationFeatureId) {
- return applicationFeatureId;
- }
-
- @Programmatic
- @Override
- public Collection<ApplicationPermissionValue> transform(Collection<ApplicationPermissionValue> permissionValues) {
- return permissionValues;
- }
- }
}
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerIdentity.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerIdentity.java
new file mode 100644
index 0000000000..4a4810a07b
--- /dev/null
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerIdentity.java
@@ -0,0 +1,66 @@
+/*
+ * 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.causeway.extensions.secman.integration.permissions;
+
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
+import org.apache.causeway.applib.annotation.Programmatic;
+import org.apache.causeway.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.causeway.extensions.secman.applib.CausewayModuleExtSecmanApplib;
+import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionValue;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.AutoConfigureOrder;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Collection;
+
+/**
+ * Created as a service, if required, by {@link AutoConfiguration}.
+ *
+ * @since 2.0 {@index}
+ */
+public class ApplicationFeatureIdTransformerIdentity implements ApplicationFeatureIdTransformer {
+
+ @Programmatic
+ @Override
+ public ApplicationFeatureId transform(ApplicationFeatureId applicationFeatureId) {
+ return applicationFeatureId;
+ }
+
+ @Programmatic
+ @Override
+ public Collection<ApplicationPermissionValue> transform(Collection<ApplicationPermissionValue> permissionValues) {
+ return permissionValues;
+ }
+
+ @AutoConfigureOrder(PriorityPrecedence.LATE)
+ @Configuration
+ public static class AutoConfiguration {
+
+ @Bean(CausewayModuleExtSecmanApplib.NAMESPACE + ".ApplicationFeatureIdTransformerIdentity")
+ @ConditionalOnMissingBean(ApplicationFeatureIdTransformer.class)
+ @Qualifier("Identity")
+ public ApplicationFeatureIdTransformer ApplicationFeatureIdTransformer() {
+ return new ApplicationFeatureIdTransformerIdentity();
+ }
+
+ }
+}
diff --git a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/PermissionsEvaluationServiceForSecman.java b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/PermissionsEvaluationServiceForSecman.java
index b0991ec9fc..b0a6adb8bb 100644
--- a/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/PermissionsEvaluationServiceForSecman.java
+++ b/extensions/security/secman/integration/src/main/java/org/apache/causeway/extensions/secman/integration/permissions/PermissionsEvaluationServiceForSecman.java
@@ -76,8 +76,8 @@ implements PermissionsEvaluationService {
final ApplicationPermissionMode mode,
final Collection<ApplicationPermissionValue> permissionValuesInput) {
- final ApplicationFeatureId targetMemberId = applicationFeatureIdTransformer().transform(targetMemberIdInput);
- final Collection<ApplicationPermissionValue> permissionValues = applicationFeatureIdTransformer().transform(permissionValuesInput);
+ final ApplicationFeatureId targetMemberId = applicationFeatureIdTransformer.transform(targetMemberIdInput);
+ final Collection<ApplicationPermissionValue> permissionValues = applicationFeatureIdTransformer.transform(permissionValuesInput);
if(_NullSafe.isEmpty(permissionValues)) {
return null;
@@ -116,14 +116,6 @@ implements PermissionsEvaluationService {
throw _Exceptions.illegalArgument("PermissionsEvaluationPolicy '%s' not recognised", policy);
}
- private ApplicationFeatureIdTransformer applicationFeatureIdTransformerCached;
- ApplicationFeatureIdTransformer applicationFeatureIdTransformer() {
- if (applicationFeatureIdTransformerCached == null) {
- applicationFeatureIdTransformerCached = applicationFeatureIdTransformers == null || applicationFeatureIdTransformers.isEmpty() ? new ApplicationFeatureIdTransformer.Identity() : applicationFeatureIdTransformers.get(0);
- }
- return applicationFeatureIdTransformerCached;
- };
-
- @Inject List<ApplicationFeatureIdTransformer> applicationFeatureIdTransformers;
+ @Inject ApplicationFeatureIdTransformer applicationFeatureIdTransformer;
}
diff --git a/extensions/security/secman/integration/src/main/resources/META-INF/spring.factories b/extensions/security/secman/integration/src/main/resources/META-INF/spring.factories
index 34738a98d8..30d7a4af8a 100644
--- a/extensions/security/secman/integration/src/main/resources/META-INF/spring.factories
+++ b/extensions/security/secman/integration/src/main/resources/META-INF/spring.factories
@@ -1,2 +1,3 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
- org.apache.causeway.extensions.secman.integration.authenticator.AuthenticatorSecmanAutoConfiguration
+ org.apache.causeway.extensions.secman.integration.authenticator.AuthenticatorSecmanAutoConfiguration,
+ org.apache.causeway.extensions.secman.integration.permissions.ApplicationFeatureIdTransformerIdentity.AutoConfiguration
diff --git a/extensions/security/secman/integration/src/test/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerV1Compatibility.java b/extensions/security/secman/integration/src/test/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerV1Compatibility.java
new file mode 100644
index 0000000000..debde0dad2
--- /dev/null
+++ b/extensions/security/secman/integration/src/test/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerV1Compatibility.java
@@ -0,0 +1,59 @@
+/*
+ * 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.causeway.extensions.secman.integration.permissions;
+
+import java.util.Collection;
+
+import lombok.RequiredArgsConstructor;
+
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.boot.autoconfigure.AutoConfigureOrder;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import org.apache.causeway.applib.annotation.PriorityPrecedence;
+import org.apache.causeway.applib.annotation.Programmatic;
+import org.apache.causeway.applib.services.appfeat.ApplicationFeatureId;
+import org.apache.causeway.extensions.secman.applib.CausewayModuleExtSecmanApplib;
+import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionValue;
+
+import javax.inject.Inject;
+
+
+@RequiredArgsConstructor(onConstructor_ = {@Inject})
+public class ApplicationFeatureIdTransformerV1Compatibility implements ApplicationFeatureIdTransformer {
+
+ private final SpecificationLoader specificationLoader;
+
+ @Programmatic
+ @Override
+ public ApplicationFeatureId transform(ApplicationFeatureId applicationFeatureId) {
+ return applicationFeatureId;
+ }
+
+ @Programmatic
+ @Override
+ public Collection<ApplicationPermissionValue> transform(Collection<ApplicationPermissionValue> permissionValues) {
+ return permissionValues;
+ }
+
+}
diff --git a/extensions/security/secman/integration/src/test/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerV1Compatibility_Test.java b/extensions/security/secman/integration/src/test/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerV1Compatibility_Test.java
new file mode 100644
index 0000000000..eae7ce4454
--- /dev/null
+++ b/extensions/security/secman/integration/src/test/java/org/apache/causeway/extensions/secman/integration/permissions/ApplicationFeatureIdTransformerV1Compatibility_Test.java
@@ -0,0 +1,47 @@
+package org.apache.causeway.extensions.secman.integration.permissions;
+
+import org.apache.causeway.applib.services.appfeat.ApplicationFeatureId;
+
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.Mock;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mockito.stubbing.Answer;
+
+import java.util.Optional;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.lenient;
+
+@ExtendWith(MockitoExtension.class)
+class ApplicationFeatureIdTransformerV1Compatibility_Test {
+
+ public static class Customer {}
+
+ @Mock SpecificationLoader mockSpecificationLoader;
+ @Mock ObjectSpecification mockSpecificationForCustomerClass;
+
+ ApplicationFeatureIdTransformer transformer;
+
+ @BeforeEach
+ void setup() {
+ transformer = new ApplicationFeatureIdTransformerV1Compatibility(mockSpecificationLoader);
+
+ lenient().when(mockSpecificationLoader.specForLogicalTypeName("customer.Customer")).thenReturn(Optional.of(mockSpecificationForCustomerClass));
+ lenient().when(mockSpecificationForCustomerClass.getCorrespondingClass()).then(__ -> Customer.class);
+ }
+
+ @Test
+ void happy_case() {
+ ApplicationFeatureId input = ApplicationFeatureId.newMember("customer.Customer", "lastName");
+ ApplicationFeatureId transform = transformer.transform(input);
+
+ assertThat(transform.getLogicalTypeName()).isEqualTo(Customer.class.getName());
+ }
+
+}
\ No newline at end of file