You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2015/12/02 10:30:02 UTC
svn commit: r1717596 - in /jackrabbit/oak/trunk/oak-authorization-cug/src:
main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/
test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/
Author: angela
Date: Wed Dec 2 09:30:01 2015
New Revision: 1717596
URL: http://svn.apache.org/viewvc?rev=1717596&view=rev
Log:
OAK-3709 : CugValidator should ignore node type definitions
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
Modified: jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java?rev=1717596&r1=1717595&r2=1717596&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java (original)
+++ jackrabbit/oak/trunk/oak-authorization-cug/src/main/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorProvider.java Wed Dec 2 09:30:01 2015
@@ -22,6 +22,7 @@ import org.apache.jackrabbit.JcrConstant
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Type;
+import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.plugins.nodetype.TypePredicate;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
@@ -40,7 +41,7 @@ class CugValidatorProvider extends Valid
@Override
protected Validator getRootValidator(NodeState before, NodeState after, CommitInfo info) {
this.isMixCug = new TypePredicate(after, MIX_REP_CUG_MIXIN);
- return new CugValidator("", after);
+ return new CugValidator("", after, false);
}
private static CommitFailedException accessViolation(int code, String message) {
@@ -56,14 +57,24 @@ class CugValidatorProvider extends Valid
}
}
+ private static boolean isNodetypeTree(CugValidator parentValidator, String name) {
+ if (parentValidator.isNodetypeTree) {
+ return true;
+ } else {
+ return NodeTypeConstants.JCR_NODE_TYPES.equals(name) && NodeTypeConstants.JCR_SYSTEM.equals(parentValidator.parentName);
+ }
+ }
+
private final class CugValidator extends DefaultValidator {
private final NodeState parentAfter;
private final String parentName;
+ private final boolean isNodetypeTree;
- private CugValidator(@Nonnull String parentName, @Nonnull NodeState parentAfter) {
+ private CugValidator(@Nonnull String parentName, @Nonnull NodeState parentAfter, @Nonnull boolean isNodetypeTree) {
this.parentAfter = parentAfter;
this.parentName = parentName;
+ this.isNodetypeTree = isNodetypeTree;
}
//------------------------------------------------------< Validator >---
@@ -89,18 +100,18 @@ class CugValidatorProvider extends Valid
@Override
public Validator childNodeAdded(String name, NodeState after) throws CommitFailedException {
- if (REP_CUG_POLICY.equals(name)) {
+ if (!isNodetypeTree && REP_CUG_POLICY.equals(name)) {
validateCugNode(parentAfter, after);
}
- return new VisibleValidator(new CugValidator(name, after), true, true);
+ return new VisibleValidator(new CugValidator(name, after, isNodetypeTree(this, name)), true, true);
}
@Override
public Validator childNodeChanged(String name, NodeState before, NodeState after) throws CommitFailedException {
- if (after.hasChildNode(REP_CUG_POLICY)) {
+ if (!isNodetypeTree && after.hasChildNode(REP_CUG_POLICY)) {
validateCugNode(after, after.getChildNode(REP_CUG_POLICY));
}
- return new VisibleValidator(new CugValidator(name, after), true, true);
+ return new VisibleValidator(new CugValidator(name, after, isNodetypeTree(this, name)), true, true);
}
}
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java?rev=1717596&r1=1717595&r2=1717596&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java (original)
+++ jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugValidatorTest.java Wed Dec 2 09:30:01 2015
@@ -16,9 +16,17 @@
*/
package org.apache.jackrabbit.oak.spi.security.authorization.cug.impl;
+import javax.annotation.CheckForNull;
+import javax.annotation.Nonnull;
+import javax.jcr.nodetype.NodeDefinitionTemplate;
+import javax.jcr.nodetype.NodeTypeTemplate;
+
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.CommitFailedException;
+import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.plugins.nodetype.write.ReadWriteNodeTypeManager;
import org.apache.jackrabbit.oak.spi.security.principal.EveryonePrincipal;
import org.apache.jackrabbit.oak.util.NodeUtil;
import org.junit.Test;
@@ -133,4 +141,28 @@ public class CugValidatorTest extends Ab
root.refresh();
}
}
+
+ @Test
+ public void testNodeTypeWithCugNames() throws Exception {
+ ReadWriteNodeTypeManager ntMgr = new ReadWriteNodeTypeManager() {
+ @Nonnull
+ @Override
+ protected Root getWriteRoot() {
+ return root;
+ }
+
+ @CheckForNull
+ @Override
+ protected Tree getTypes() {
+ return root.getTree(NODE_TYPES_PATH);
+ }
+ };
+ NodeTypeTemplate ntTemplate = ntMgr.createNodeTypeTemplate();
+ ntTemplate.setName("testNT");
+ NodeDefinitionTemplate ndt = ntMgr.createNodeDefinitionTemplate();
+ ndt.setName(REP_CUG_POLICY);
+ ndt.setRequiredPrimaryTypeNames(new String[] {JcrConstants.NT_BASE});
+ ntTemplate.getNodeDefinitionTemplates().add(ndt);
+ ntMgr.registerNodeType(ntTemplate, true);
+ }
}
\ No newline at end of file