You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by kw...@apache.org on 2021/01/29 11:09:07 UTC
[jackrabbit-filevault] 01/01: JCRVLT-497 correctly switch context
if authorizable node is first detected as simple nt:folder
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch bugfix/JCRVLT-497-fix-late-detection-of-authorizables
in repository https://gitbox.apache.org/repos/asf/jackrabbit-filevault.git
commit 4b82fc52bf204ef28ef1deb66cdda91857a2236d
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Fri Jan 29 12:08:52 2021 +0100
JCRVLT-497 correctly switch context if authorizable node is first
detected as simple nt:folder
---
.../spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java | 5 ++++-
.../spi/impl/nodetype/NodeTypeValidatorTest.java | 25 ++++++++++++++++++++++
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git a/vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java b/vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java
index 65158f6..1fe29dd 100644
--- a/vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java
+++ b/vault-validation/src/main/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/JcrNodeTypeMetaDataImpl.java
@@ -106,7 +106,7 @@ public class JcrNodeTypeMetaDataImpl implements JcrNodeTypeMetaData {
private final @NotNull Map<Name, JcrNodeTypeMetaDataImpl> childNodesByName;
private final @Nullable JcrNodeTypeMetaDataImpl parentNode;
private final Collection<ValidationMessage> messages;
- private final boolean isAuthenticationOrAuthorizationContext;
+ private boolean isAuthenticationOrAuthorizationContext;
private final boolean isImplicit; // if this is true, the node type is set implicitly (not explicitly set in package, used as is in the
// repository)
private boolean isValidationDone;
@@ -151,6 +151,9 @@ public class JcrNodeTypeMetaDataImpl implements JcrNodeTypeMetaData {
if (effectiveNodeType == null || !effectiveNodeType.includesNodeTypes(types.toArray(new Name[0]))) {
this.primaryNodeType = types.get(0);
this.effectiveNodeType = effectiveNodeTypeProvider.getEffectiveNodeType(types.toArray(new Name[0]));
+ if (!isAuthenticationOrAuthorizationContext) {
+ isAuthenticationOrAuthorizationContext = isAclOrAuthorizableNodeType(effectiveNodeType);
+ }
}
}
diff --git a/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/NodeTypeValidatorTest.java b/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/NodeTypeValidatorTest.java
index a42ec09..1cea74a 100644
--- a/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/NodeTypeValidatorTest.java
+++ b/vault-validation/src/test/java/org/apache/jackrabbit/vault/validation/spi/impl/nodetype/NodeTypeValidatorTest.java
@@ -34,6 +34,7 @@ import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.commons.cnd.ParseException;
import org.apache.jackrabbit.spi.Name;
import org.apache.jackrabbit.spi.commons.name.NameConstants;
+import org.apache.jackrabbit.spi.commons.name.NameFactoryImpl;
import org.apache.jackrabbit.vault.fs.api.WorkspaceFilter;
import org.apache.jackrabbit.vault.fs.config.ConfigurationException;
import org.apache.jackrabbit.vault.fs.config.DefaultWorkspaceFilter;
@@ -56,6 +57,9 @@ public class NodeTypeValidatorTest {
private NodeTypeValidator validator;
private DefaultWorkspaceFilter filter;
+ static final Name REP_AUTHORIZABLE_ID = NameFactoryImpl.getInstance().create(Name.NS_REP_URI, "authorizableId");
+ static final Name REP_PRINCIPAL_NAME = NameFactoryImpl.getInstance().create(Name.NS_REP_URI, "principalName");
+
@Before
public void setUp() throws IOException, ConfigurationException, RepositoryException, ParseException {
filter = new DefaultWorkspaceFilter();
@@ -310,4 +314,25 @@ public class NodeTypeValidatorTest {
Assert.assertThat(validator.done(), AnyValidationMessageMatcher.noValidationInCollection());
}
+ @Test
+ public void testAuthorizableNodes() {
+ // the folder is detected first
+ NodeContext nodeContext = new NodeContextImpl("/home/users/system/systemuser", Paths.get("node4"), Paths.get(""));
+ Assert.assertThat(validator.validateJcrPath(nodeContext, true, false),
+ AnyValidationMessageMatcher.noValidationInCollection());
+ Map<String, DocViewProperty> props = new HashMap<>();
+ props.put(NameConstants.JCR_PRIMARYTYPE.toString(), new DocViewProperty(NameConstants.JCR_PRIMARYTYPE.toString(),
+ new String[] { "rep:SystemUser" }, false, PropertyType.STRING));
+ props.put(NameConstants.JCR_UUID.toString(), new DocViewProperty(NameConstants.JCR_UUID.toString(),
+ new String[] { "41699399-95fd-444d-ab8c-b9f8e614607e" }, false, PropertyType.STRING));
+ props.put(REP_AUTHORIZABLE_ID.toString(), new DocViewProperty(REP_AUTHORIZABLE_ID.toString(),
+ new String[] { "systemuser" }, false, PropertyType.STRING));
+ props.put(REP_PRINCIPAL_NAME.toString(), new DocViewProperty(REP_PRINCIPAL_NAME.toString(),
+ new String[] { "systemuser" }, false, PropertyType.STRING));
+ // then the actual doctype with the user
+ DocViewNode node = new DocViewNode("jcr:root", "jcr:root", null, props, new String[] { }, "rep:SystemUser");
+ Assert.assertThat(validator.validate(node, nodeContext, true),
+ AnyValidationMessageMatcher.noValidationInCollection());
+ Assert.assertThat(validator.done(), AnyValidationMessageMatcher.noValidationInCollection());
+ }
}