Author: angela
Date: Wed May 9 15:38:38 2018
New Revision: 1831261
URL: http://svn.apache.org/viewvc?rev=1831261&view=rev
Log:
OAK-7470 : Remove Usage of ImmutableTree and AbstractTree in Security Code
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/ProviderCtx.java
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/EmptyCugTreePermissionTest.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/impl/TreeProviderService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermission.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermission.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidator.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCoverageTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCustomMixTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderNoScopeTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermissionTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/FullScopeProvider.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermissionTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImplTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorTest.java
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/TreeProvider.java
jackrabbit/oak/trunk/oak-security-spi/src/main/java/org/apache/jackrabbit/oak/plugins/tree/package-info.java
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.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/CugTreePermissionTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugTreePermissionTest.java
Wed May 9 15:38:38 2018
@@ -24,6 +24,7 @@ import org.apache.jackrabbit.oak.api.Pro
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.plugins.tree.impl.AbstractTree;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
@@ -65,14 +66,15 @@ public class CugTreePermissionTest exten
@Test
public void testGetChildPermission() throws Exception {
- NodeState ns = ((AbstractTree) root.getTree(SUPPORTED_PATH +
"/subtree")).getNodeState();
+ TreeProvider treeProvider = getTreeProvider();
+ NodeState ns = treeProvider.asNodeState(root.getTree(SUPPORTED_PATH +
"/subtree"));
TreePermission child = allowedTp.getChildPermission("subtree", ns);
assertTrue(child instanceof CugTreePermission);
child = deniedTp.getChildPermission("subtree", ns);
assertTrue(child instanceof CugTreePermission);
- NodeState cugNs = ((AbstractTree)
root.getTree(PathUtils.concat(SUPPORTED_PATH, REP_CUG_POLICY))).getNodeState();
+ NodeState cugNs =
treeProvider.asNodeState(root.getTree(PathUtils.concat(SUPPORTED_PATH,
REP_CUG_POLICY)));
TreePermission cugChild = allowedTp.getChildPermission(REP_CUG_POLICY,
cugNs);
assertSame(TreePermission.NO_RECOURSE, cugChild);
}
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.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/CugUtilTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/CugUtilTest.java
Wed May 9 15:38:38 2018
@@ -22,6 +22,7 @@ import javax.annotation.Nonnull;
import com.google.common.collect.ImmutableSet;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.plugins.tree.impl.AbstractTree;
import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
@@ -61,8 +62,8 @@ public class CugUtilTest extends Abstrac
}
@Nonnull
- private static NodeState getNodeState(@Nonnull Tree tree) {
- return ((AbstractTree) tree).getNodeState();
+ private NodeState getNodeState(@Nonnull Tree tree) {
+ return getTreeProvider().asNodeState(tree);
}
@Test
Modified:
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/EmptyCugTreePermissionTest.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/EmptyCugTreePermissionTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/EmptyCugTreePermissionTest.java
(original)
+++
jackrabbit/oak/trunk/oak-authorization-cug/src/test/java/org/apache/jackrabbit/oak/spi/security/authorization/cug/impl/EmptyCugTreePermissionTest.java
Wed May 9 15:38:38 2018
@@ -56,7 +56,7 @@ public class EmptyCugTreePermissionTest
Root readOnlyRoot = getRootProvider().createReadOnlyRoot(root);
Tree t = readOnlyRoot.getTree("/");
tp = new EmptyCugTreePermission(t, TreeType.DEFAULT, pp);
- rootState = ((AbstractTree) t).getNodeState();
+ rootState = getTreeProvider().asNodeState(t);
}
@Test
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/impl/TreeProviderService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/impl/TreeProviderService.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/impl/TreeProviderService.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/tree/impl/TreeProviderService.java
Wed May 9 15:38:38 2018
@@ -24,6 +24,8 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.osgi.service.component.annotations.Component;
+import static com.google.common.base.Preconditions.checkArgument;
+
@Component(service = {TreeProvider.class})
public class TreeProviderService implements TreeProvider {
@@ -38,4 +40,11 @@ public class TreeProviderService impleme
public Tree createReadOnlyTree(@Nonnull Tree readOnlyParent, @Nonnull
String childName, @Nonnull NodeState childState) {
return TreeFactory.createReadOnlyTree(readOnlyParent, childName,
childState);
}
+
+ @Nonnull
+ @Override
+ public NodeState asNodeState(@Nonnull Tree readOnlyTree) {
+ checkArgument(readOnlyTree instanceof AbstractTree);
+ return ((AbstractTree) readOnlyTree).getNodeState();
+ }
}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
Wed May 9 15:38:38 2018
@@ -59,6 +59,7 @@ import org.apache.jackrabbit.oak.spi.xml
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.Designate;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@@ -73,8 +74,8 @@ import static org.apache.jackrabbit.oak.
service = {AuthorizationConfiguration.class,
SecurityConfiguration.class},
property = OAK_SECURITY_NAME +
"=org.apache.jackrabbit.oak.security.authorization.AuthorizationConfigurationImpl")
@Designate(ocd = AuthorizationConfigurationImpl.Configuration.class)
-public class AuthorizationConfigurationImpl extends ConfigurationBase
implements AuthorizationConfiguration {
-
+public class AuthorizationConfigurationImpl extends ConfigurationBase
implements AuthorizationConfiguration, ProviderCtx {
+
@ObjectClassDefinition(name = "Apache Jackrabbit Oak
AuthorizationConfiguration")
@interface Configuration {
@AttributeDefinition(
@@ -116,7 +117,6 @@ public class AuthorizationConfigurationI
int configurationRanking() default 100;
}
- @Reference
private MountInfoProvider mountInfoProvider =
Mounts.defaultMountInfoProvider();
public AuthorizationConfigurationImpl() {
@@ -166,8 +166,8 @@ public class AuthorizationConfigurationI
public List<ValidatorProvider> getValidators(@Nonnull String
workspaceName, @Nonnull Set<Principal> principals, @Nonnull MoveTracker
moveTracker) {
return ImmutableList.of(
new PermissionStoreValidatorProvider(),
- new PermissionValidatorProvider(getSecurityProvider(),
workspaceName, principals, moveTracker, getRootProvider(), getTreeProvider()),
- new AccessControlValidatorProvider(getSecurityProvider(),
getRootProvider(), getTreeProvider()));
+ new PermissionValidatorProvider(workspaceName, principals,
moveTracker, this),
+ new AccessControlValidatorProvider(this));
}
@Nonnull
@@ -202,13 +202,23 @@ public class AuthorizationConfigurationI
if (mountInfoProvider.hasNonDefaultMounts()) {
return new MountPermissionProvider(root, workspaceName,
principals, getRestrictionProvider(),
- getParameters(), ctx, mountInfoProvider,
getRootProvider());
+ getParameters(), ctx, this);
} else {
return new PermissionProviderImpl(root, workspaceName, principals,
getRestrictionProvider(),
- getParameters(), ctx, getRootProvider());
+ getParameters(), ctx, this);
}
}
+ //--------------------------------------------------------< ProviderCtx
>---
+
+ @Nonnull
+ @Override
+ public MountInfoProvider getMountInfoProvider() {
+ return mountInfoProvider;
+ }
+
+
//--------------------------------------------------------------------------
+ @Reference(name = "mountInfoProvider", cardinality =
ReferenceCardinality.MANDATORY)
public void bindMountInfoProvider(MountInfoProvider mountInfoProvider) {
this.mountInfoProvider = mountInfoProvider;
}
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/ProviderCtx.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/ProviderCtx.java?rev=1831261&view=auto
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/ProviderCtx.java
(added)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/ProviderCtx.java
Wed May 9 15:38:38 2018
@@ -0,0 +1,39 @@
+/*
+ * 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.jackrabbit.oak.security.authorization;
+
+import javax.annotation.Nonnull;
+
+import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
+
+public interface ProviderCtx {
+
+ @Nonnull
+ SecurityProvider getSecurityProvider();
+
+ @Nonnull
+ TreeProvider getTreeProvider();
+
+ @Nonnull
+ RootProvider getRootProvider();
+
+ @Nonnull
+ MountInfoProvider getMountInfoProvider();
+}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidator.java
Wed May 9 15:38:38 2018
@@ -37,7 +37,7 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.tree.TreeConstants;
import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
-import org.apache.jackrabbit.oak.plugins.tree.impl.AbstractTree;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.commit.VisibleValidator;
@@ -59,6 +59,7 @@ import static org.apache.jackrabbit.oak.
*/
class AccessControlValidator extends DefaultValidator implements
AccessControlConstants {
+ private final TreeProvider treeProvider;
private final Tree parentAfter;
private final PrivilegeBitsProvider privilegeBitsProvider;
@@ -72,7 +73,8 @@ class AccessControlValidator extends Def
@Nonnull PrivilegeManager privilegeManager,
@Nonnull PrivilegeBitsProvider
privilegeBitsProvider,
@Nonnull RestrictionProvider restrictionProvider,
- @Nonnull TreeProvider treeProvider) {
+ @Nonnull ProviderCtx providerCtx) {
+ treeProvider = providerCtx.getTreeProvider();
this.parentAfter = treeProvider.createReadOnlyTree(parentAfter);
this.privilegeBitsProvider = privilegeBitsProvider;
this.privilegeManager = privilegeManager;
@@ -82,6 +84,7 @@ class AccessControlValidator extends Def
}
private AccessControlValidator(AccessControlValidator parent, Tree
parentAfter) {
+ this.treeProvider = parent.treeProvider;
this.parentAfter = parentAfter;
this.privilegeBitsProvider = parent.privilegeBitsProvider;
this.privilegeManager = parent.privilegeManager;
@@ -176,10 +179,10 @@ class AccessControlValidator extends Def
private void checkValidPolicy(Tree parent, Tree policyTree, NodeState
policyNode) throws CommitFailedException {
if (REP_REPO_POLICY.equals(policyTree.getName())) {
- checkValidAccessControlledNode(parent, isRepoAccessControllable);
+ checkValidAccessControlledNode(parent, isRepoAccessControllable,
treeProvider);
checkValidRepoAccessControlled(parent);
} else {
- checkValidAccessControlledNode(parent, isAccessControllable);
+ checkValidAccessControlledNode(parent, isAccessControllable,
treeProvider);
}
Collection<String> validPolicyNames = (parent.isRoot()) ?
@@ -204,13 +207,13 @@ class AccessControlValidator extends Def
}
private static void checkValidAccessControlledNode(@Nonnull Tree
accessControlledTree,
- @Nonnull TypePredicate
requiredMixin) throws CommitFailedException {
+ @Nonnull TypePredicate
requiredMixin,
+ @Nonnull TreeProvider
treeProvider) throws CommitFailedException {
if
(AC_NODETYPE_NAMES.contains(TreeUtil.getPrimaryTypeName(accessControlledTree)))
{
throw accessViolation(5, "Access control policy within access
control content (" + accessControlledTree.getPath() + ')');
}
- NodeState ns = (accessControlledTree instanceof AbstractTree) ?
((AbstractTree) accessControlledTree).getNodeState() : null;
- if (!requiredMixin.apply(ns)) {
+ if
(!requiredMixin.apply(treeProvider.asNodeState(accessControlledTree))) {
String msg = "Isolated policy node (" +
accessControlledTree.getPath() + "). Parent is not of type " + requiredMixin;
throw accessViolation(6, msg);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorProvider.java
Wed May 9 15:38:38 2018
@@ -20,13 +20,11 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.api.security.authorization.PrivilegeManager;
import org.apache.jackrabbit.oak.api.Root;
-import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
-import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
@@ -41,14 +39,10 @@ import org.apache.jackrabbit.oak.spi.sta
*/
public class AccessControlValidatorProvider extends ValidatorProvider {
- private final SecurityProvider securityProvider;
- private final RootProvider rootProvider;
- private final TreeProvider treeProvider;
-
- public AccessControlValidatorProvider(@Nonnull SecurityProvider
securityProvider, @Nonnull RootProvider rootProvider, @Nonnull TreeProvider
treeProvider) {
- this.securityProvider = securityProvider;
- this.rootProvider = rootProvider;
- this.treeProvider = treeProvider;
+ private final ProviderCtx providerCtx;
+
+ public AccessControlValidatorProvider(@Nonnull ProviderCtx providerCtx) {
+ this.providerCtx = providerCtx;
}
//--------------------------------------------------< ValidatorProvider
>---
@@ -58,14 +52,14 @@ public class AccessControlValidatorProvi
RestrictionProvider restrictionProvider =
getConfig(AuthorizationConfiguration.class).getRestrictionProvider();
- Root root = rootProvider.createReadOnlyRoot(before);
+ Root root = providerCtx.getRootProvider().createReadOnlyRoot(before);
PrivilegeManager privilegeManager =
getConfig(PrivilegeConfiguration.class).getPrivilegeManager(root,
NamePathMapper.DEFAULT);
PrivilegeBitsProvider privilegeBitsProvider = new
PrivilegeBitsProvider(root);
- return new AccessControlValidator(after, privilegeManager,
privilegeBitsProvider, restrictionProvider, treeProvider);
+ return new AccessControlValidator(after, privilegeManager,
privilegeBitsProvider, restrictionProvider, providerCtx);
}
private <T> T getConfig(Class<T> configClass) {
- return securityProvider.getConfiguration(configClass);
+ return providerCtx.getSecurityProvider().getConfiguration(configClass);
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeAuthorizationConfiguration.java
Wed May 9 15:38:38 2018
@@ -185,7 +185,7 @@ public class CompositeAuthorizationConfi
pp = aggrPermissionProviders.get(0);
break;
default :
- pp = new CompositePermissionProvider(root,
aggrPermissionProviders, getContext(), compositionType, getRootProvider());
+ pp = new CompositePermissionProvider(root,
aggrPermissionProviders, getContext(), compositionType, getRootProvider(),
getTreeProvider());
}
return pp;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositePermissionProvider.java
Wed May 9 15:38:38 2018
@@ -27,9 +27,9 @@ import org.apache.jackrabbit.oak.api.Roo
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.plugins.tree.TreeType;
import org.apache.jackrabbit.oak.plugins.tree.TreeTypeProvider;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
import
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType;
import
org.apache.jackrabbit.oak.security.authorization.permission.PermissionUtil;
import org.apache.jackrabbit.oak.spi.security.Context;
@@ -57,6 +57,7 @@ class CompositePermissionProvider implem
private final Context ctx;
private final CompositionType compositionType;
private final RootProvider rootProvider;
+ private final TreeProvider treeProvider;
private final RepositoryPermission repositoryPermission;
@@ -66,12 +67,13 @@ class CompositePermissionProvider implem
CompositePermissionProvider(@Nonnull Root root, @Nonnull
List<AggregatedPermissionProvider> pps,
@Nonnull Context acContext, @Nonnull
CompositionType compositionType,
- @Nonnull RootProvider rootProvider) {
+ @Nonnull RootProvider rootProvider, @Nonnull
TreeProvider treeProvider) {
this.root = root;
this.pps = pps.toArray(new AggregatedPermissionProvider[pps.size()]);
this.ctx = acContext;
this.compositionType = compositionType;
this.rootProvider = rootProvider;
+ this.treeProvider = treeProvider;
repositoryPermission = new CompositeRepositoryPermission(this.pps,
this.compositionType);
immutableRoot = rootProvider.createReadOnlyRoot(root);
@@ -93,7 +95,7 @@ class CompositePermissionProvider implem
@Nonnull
@Override
public Set<String> getPrivileges(@Nullable Tree tree) {
- Tree immutableTree = PermissionUtil.getImmutableTree(tree,
immutableRoot);
+ Tree immutableTree = PermissionUtil.getReadOnlyTree(tree,
immutableRoot);
PrivilegeBits result = PrivilegeBits.getInstance();
PrivilegeBits denied = PrivilegeBits.getInstance();
@@ -122,7 +124,7 @@ class CompositePermissionProvider implem
@Override
public boolean hasPrivileges(@Nullable Tree tree, @Nonnull String...
privilegeNames) {
- Tree immutableTree = PermissionUtil.getImmutableTree(tree,
immutableRoot);
+ Tree immutableTree = PermissionUtil.getReadOnlyTree(tree,
immutableRoot);
PrivilegeBits privilegeBits =
privilegeBitsProvider.getBits(privilegeNames);
if (privilegeBits.isEmpty()) {
return true;
@@ -168,19 +170,19 @@ class CompositePermissionProvider implem
@Nonnull
@Override
public TreePermission getTreePermission(@Nonnull Tree tree, @Nonnull
TreePermission parentPermission) {
- ImmutableTree immutableTree = (ImmutableTree)
PermissionUtil.getImmutableTree(tree, immutableRoot);
+ Tree readOnlyTree = PermissionUtil.getReadOnlyTree(tree,
immutableRoot);
if (tree.isRoot()) {
- return CompositeTreePermission.create(immutableTree, typeProvider,
pps, compositionType);
+ return CompositeTreePermission.create(readOnlyTree, treeProvider,
typeProvider, pps, compositionType);
} else if (parentPermission instanceof CompositeTreePermission) {
- return CompositeTreePermission.create(immutableTree,
((CompositeTreePermission) parentPermission));
+ return CompositeTreePermission.create(readOnlyTree, treeProvider,
((CompositeTreePermission) parentPermission));
} else {
- return
parentPermission.getChildPermission(immutableTree.getName(),
immutableTree.getNodeState());
+ return parentPermission.getChildPermission(readOnlyTree.getName(),
treeProvider.asNodeState(readOnlyTree));
}
}
@Override
public boolean isGranted(@Nonnull Tree parent, @Nullable PropertyState
property, long permissions) {
- Tree immParent = PermissionUtil.getImmutableTree(parent,
immutableRoot);
+ Tree immParent = PermissionUtil.getReadOnlyTree(parent, immutableRoot);
boolean isGranted = false;
long coveredPermissions = Permissions.NO_PERMISSION;
@@ -348,13 +350,13 @@ class CompositePermissionProvider implem
@Override
public TreePermission getTreePermission(@Nonnull Tree tree, @Nonnull
TreeType type,
@Nonnull TreePermission parentPermission) {
- ImmutableTree immutableTree = (ImmutableTree)
PermissionUtil.getImmutableTree(tree, immutableRoot);
+ Tree immutableTree = PermissionUtil.getReadOnlyTree(tree,
immutableRoot);
if (tree.isRoot()) {
- return CompositeTreePermission.create(immutableTree, typeProvider,
pps, compositionType);
+ return CompositeTreePermission.create(immutableTree, treeProvider,
typeProvider, pps, compositionType);
} else if (parentPermission instanceof CompositeTreePermission) {
- return CompositeTreePermission.create(immutableTree,
((CompositeTreePermission) parentPermission), type);
+ return CompositeTreePermission.create(immutableTree, treeProvider,
((CompositeTreePermission) parentPermission), type);
} else {
- return
parentPermission.getChildPermission(immutableTree.getName(),
immutableTree.getNodeState());
+ return
parentPermission.getChildPermission(immutableTree.getName(),
treeProvider.asNodeState(immutableTree));
}
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermission.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermission.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermission.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeTreePermission.java
Wed May 9 15:38:38 2018
@@ -16,35 +16,35 @@
*/
package org.apache.jackrabbit.oak.security.authorization.composite;
-import static
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.AND;
-import static
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.OR;
-
import java.util.function.Supplier;
-
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.plugins.tree.TreeType;
import org.apache.jackrabbit.oak.plugins.tree.TreeTypeProvider;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
import
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
import org.apache.jackrabbit.oak.spi.state.NodeState;
+import static
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.AND;
+import static
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType.OR;
+
/**
* {@code TreePermission} implementation that combines multiple {@code
TreePermission}
* implementations.
*/
final class CompositeTreePermission implements TreePermission {
- private final ImmutableTree tree;
+ private final Tree tree;
private final TreeType type;
private final CompositionType compositionType;
+ private final TreeProvider treeProvider;
private final TreeTypeProvider typeProvider;
private final AggregatedPermissionProvider[] providers;
private final TreePermission[] treePermissions;
@@ -53,12 +53,14 @@ final class CompositeTreePermission impl
private Boolean canRead;
private Boolean canReadProperties;
- private CompositeTreePermission(@Nonnull ImmutableTree tree, @Nonnull
TreeType type,
+ private CompositeTreePermission(@Nonnull Tree tree, @Nonnull TreeType type,
+ @Nonnull TreeProvider treeProvider,
@Nonnull TreeTypeProvider typeProvider, @Nonnull
AggregatedPermissionProvider[] providers,
@Nonnull TreePermission[] treePermissions, int cnt, @Nonnull
CompositionType compositionType) {
this.tree = tree;
this.type = type;
+ this.treeProvider = treeProvider;
this.typeProvider = typeProvider;
this.providers = providers;
this.treePermissions = treePermissions;
@@ -66,8 +68,11 @@ final class CompositeTreePermission impl
this.compositionType = compositionType;
}
- static TreePermission create(@Nonnull ImmutableTree rootTree, @Nonnull
TreeTypeProvider typeProvider,
- @Nonnull AggregatedPermissionProvider[] providers, @Nonnull
CompositionType compositionType) {
+ static TreePermission create(@Nonnull Tree rootTree,
+ @Nonnull TreeProvider treeProvider,
+ @Nonnull TreeTypeProvider typeProvider,
+ @Nonnull AggregatedPermissionProvider[]
providers,
+ @Nonnull CompositionType compositionType) {
switch (providers.length) {
case 0 : return TreePermission.EMPTY;
case 1 : return providers[0].getTreePermission(rootTree,
TreeType.DEFAULT, TreePermission.EMPTY);
@@ -81,22 +86,24 @@ final class CompositeTreePermission impl
}
treePermissions[i] = tp;
}
- return new CompositeTreePermission(rootTree, TreeType.DEFAULT,
typeProvider, providers, treePermissions,
+ return new CompositeTreePermission(rootTree, TreeType.DEFAULT,
treeProvider, typeProvider, providers, treePermissions,
cnt, compositionType);
}
}
- static TreePermission create(@Nonnull final ImmutableTree tree, @Nonnull
CompositeTreePermission parentPermission) {
- return create(() -> tree, tree.getName(), tree.getNodeState(),
parentPermission, null);
+ static TreePermission create(@Nonnull final Tree tree, @Nonnull
TreeProvider treeProvider, @Nonnull CompositeTreePermission parentPermission) {
+ return create(() -> tree, tree.getName(),
treeProvider.asNodeState(tree), parentPermission, null);
}
- static TreePermission create(@Nonnull final ImmutableTree tree, @Nonnull
CompositeTreePermission parentPermission,
- @Nullable TreeType treeType) {
- return create(() -> tree, tree.getName(), tree.getNodeState(),
parentPermission, treeType);
+ static TreePermission create(@Nonnull final Tree tree, @Nonnull
TreeProvider treeProvider, @Nonnull CompositeTreePermission parentPermission,
+ @Nullable TreeType treeType) {
+ return create(() -> tree, tree.getName(),
treeProvider.asNodeState(tree), parentPermission, treeType);
}
- private static TreePermission create(@Nonnull Supplier<ImmutableTree>
lazyTree, @Nonnull String childName, @Nonnull NodeState childState, @Nonnull
CompositeTreePermission parentPermission,
- @Nullable TreeType treeType) {
+ private static TreePermission create(@Nonnull Supplier<Tree> lazyTree,
+ @Nonnull String childName, @Nonnull
NodeState childState,
+ @Nonnull CompositeTreePermission
parentPermission,
+ @Nullable TreeType treeType) {
switch (parentPermission.childSize) {
case 0: return TreePermission.EMPTY;
case 1:
@@ -109,7 +116,7 @@ final class CompositeTreePermission impl
}
return (parent == null) ? TreePermission.EMPTY :
parent.getChildPermission(childName, childState);
default:
- ImmutableTree tree = lazyTree.get();
+ Tree tree = lazyTree.get();
TreeType type;
if (treeType != null) {
type = treeType;
@@ -133,7 +140,7 @@ final class CompositeTreePermission impl
j++;
}
}
- return new CompositeTreePermission(tree, type,
parentPermission.typeProvider, pvds, tps, cnt,
+ return new CompositeTreePermission(tree, type,
parentPermission.treeProvider, parentPermission.typeProvider, pvds, tps, cnt,
parentPermission.compositionType);
}
}
@@ -142,7 +149,7 @@ final class CompositeTreePermission impl
@Nonnull
@Override
public TreePermission getChildPermission(@Nonnull final String childName,
@Nonnull final NodeState childState) {
- return create(() -> new ImmutableTree(tree, childName, childState),
childName, childState, this, null);
+ return create(() -> treeProvider.createReadOnlyTree(tree, childName,
childState), childName, childState, this, null);
}
@Override
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java
Wed May 9 15:38:38 2018
@@ -36,11 +36,11 @@ import org.apache.jackrabbit.oak.api.Pro
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import org.apache.jackrabbit.oak.plugins.tree.TreeType;
import org.apache.jackrabbit.oak.plugins.tree.TreeTypeProvider;
-import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
import org.apache.jackrabbit.oak.plugins.version.ReadOnlyVersionManager;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import org.apache.jackrabbit.oak.spi.security.Context;
import
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
@@ -48,13 +48,11 @@ import org.apache.jackrabbit.oak.spi.sec
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.Permissions;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.RepositoryPermission;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
-import
org.apache.jackrabbit.oak.spi.security.authorization.restriction.RestrictionProvider;
import org.apache.jackrabbit.oak.spi.security.principal.GroupPrincipals;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.jackrabbit.oak.spi.state.NodeState;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -77,7 +75,9 @@ final class CompiledPermissionImpl imple
private final PermissionStore store;
private final PermissionEntryProvider userStore;
private final PermissionEntryProvider groupStore;
+
private final TreeTypeProvider typeProvider;
+ private final ProviderCtx providerCtx;
private Root root;
private ReadOnlyVersionManager versionManager;
@@ -87,11 +87,12 @@ final class CompiledPermissionImpl imple
@Nonnull Root root,
@Nonnull String workspaceName,
@Nonnull PermissionStore store,
- @Nonnull RestrictionProvider
restrictionProvider,
@Nonnull ConfigurationParameters options,
- @Nonnull Context ctx) {
+ @Nonnull Context ctx,
+ @Nonnull ProviderCtx providerCtx) {
this.root = root;
this.workspaceName = workspaceName;
+ this.providerCtx = providerCtx;
bitsProvider = new PrivilegeBitsProvider(root);
@@ -120,14 +121,14 @@ final class CompiledPermissionImpl imple
@Nonnull String workspaceName,
@Nonnull PermissionStore store,
@Nonnull Set<Principal> principals,
- @Nonnull RestrictionProvider
restrictionProvider,
@Nonnull ConfigurationParameters options,
- @Nonnull Context ctx) {
+ @Nonnull Context ctx,
+ @Nonnull ProviderCtx providerCtx) {
Tree permissionsTree = PermissionUtil.getPermissionsRoot(root,
workspaceName);
if (!permissionsTree.exists() || principals.isEmpty()) {
return NoPermissions.getInstance();
} else {
- return new CompiledPermissionImpl(principals, root, workspaceName,
store, restrictionProvider, options, ctx);
+ return new CompiledPermissionImpl(principals, root, workspaceName,
store, options, ctx, providerCtx);
}
}
@@ -193,7 +194,7 @@ final class CompiledPermissionImpl imple
while (!versionableTree.exists()) {
versionableTree = versionableTree.getParent();
}
- return new VersionTreePermission(tree,
buildVersionDelegatee(versionableTree));
+ return new VersionTreePermission(tree,
buildVersionDelegatee(versionableTree), providerCtx.getTreeProvider());
}
}
case ACCESS_CONTROL:
@@ -484,7 +485,7 @@ final class CompiledPermissionImpl imple
@Nonnull
@Override
public TreePermission getChildPermission(@Nonnull String childName,
@Nonnull NodeState childState) {
- Tree childTree = new ImmutableTree((ImmutableTree) tree,
childName, childState);
+ Tree childTree =
providerCtx.getTreeProvider().createReadOnlyTree(tree, childName, childState);
return getTreePermission(childTree,
typeProvider.getType(childTree, type), this);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MountPermissionProvider.java
Wed May 9 15:38:38 2018
@@ -24,7 +24,7 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.commons.LongUtils;
-import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
import org.apache.jackrabbit.oak.spi.mount.Mount;
import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
@@ -49,10 +49,9 @@ public class MountPermissionProvider ext
public MountPermissionProvider(@Nonnull Root root, @Nonnull String
workspaceName,
@Nonnull Set<Principal> principals,
@Nonnull RestrictionProvider restrictionProvider,
@Nonnull ConfigurationParameters options,
@Nonnull Context ctx,
- @Nonnull MountInfoProvider
mountInfoProvider,
- @Nonnull RootProvider rootProvider) {
- super(root, workspaceName, principals, restrictionProvider, options,
ctx, rootProvider);
- this.mountInfoProvider = mountInfoProvider;
+ @Nonnull ProviderCtx providerCtx) {
+ super(root, workspaceName, principals, restrictionProvider, options,
ctx, providerCtx);
+ this.mountInfoProvider = providerCtx.getMountInfoProvider();
}
@Override
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/MoveAwarePermissionValidator.java
Wed May 9 15:38:38 2018
@@ -24,7 +24,7 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.spi.commit.EditorDiff;
import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
import org.apache.jackrabbit.oak.spi.commit.Validator;
@@ -75,12 +75,11 @@ public class MoveAwarePermissionValidato
private Validator visibleValidator(@Nonnull Tree source,
@Nonnull Tree dest) {
// TODO improve: avoid calculating the 'before' permissions in case
the current parent permissions already point to the correct tree.
- ImmutableTree immutableTree = (ImmutableTree)
moveCtx.rootBefore.getTree("/");
- TreePermission tp =
getPermissionProvider().getTreePermission(immutableTree
- , TreePermission.EMPTY);
+ Tree immutableTree = moveCtx.rootBefore.getTree("/");
+ TreePermission tp =
getPermissionProvider().getTreePermission(immutableTree, TreePermission.EMPTY);
for (String n : PathUtils.elements(source.getPath())) {
immutableTree = immutableTree.getChild(n);
- tp = tp.getChildPermission(n, immutableTree.getNodeState());
+ tp = tp.getChildPermission(n,
getTreeProvider().asNodeState(immutableTree));
}
Validator validator = createValidator(source, dest, tp, this);
return new VisibleValidator(validator, true, false);
@@ -129,10 +128,10 @@ public class MoveAwarePermissionValidato
if (parent == null) {
return false;
}
- ImmutableTree child = (ImmutableTree) parent.getChild(name);
+ Tree child = parent.getChild(name);
String sourcePath = moveTracker.getSourcePath(child.getPath());
if (sourcePath != null) {
- ImmutableTree source = (ImmutableTree)
rootBefore.getTree(sourcePath);
+ Tree source = rootBefore.getTree(sourcePath);
if (source.exists()) {
// check permissions for adding the moved node at the
target location.
validator.checkPermissions(child, false,
Permissions.ADD_NODE | Permissions.NODE_TYPE_MANAGEMENT);
@@ -147,10 +146,10 @@ public class MoveAwarePermissionValidato
if (parent == null) {
return false;
}
- ImmutableTree child = (ImmutableTree) parent.getChild(name);
+ Tree child = parent.getChild(name);
String destPath = moveTracker.getDestPath(child.getPath());
if (destPath != null) {
- ImmutableTree dest = (ImmutableTree)
rootAfter.getTree(destPath);
+ Tree dest = rootAfter.getTree(destPath);
if (dest.exists()) {
// check permissions for removing that node.
validator.checkPermissions(child, true,
Permissions.REMOVE_NODE);
@@ -162,10 +161,11 @@ public class MoveAwarePermissionValidato
return false;
}
- private boolean diff(@Nonnull ImmutableTree source, @Nonnull
ImmutableTree dest,
+ private boolean diff(@Nonnull Tree source, @Nonnull Tree dest,
@Nonnull MoveAwarePermissionValidator validator)
throws CommitFailedException {
Validator nextValidator = validator.visibleValidator(source, dest);
- CommitFailedException e = EditorDiff.process(nextValidator ,
source.getNodeState(), dest.getNodeState());
+ TreeProvider tp = validator.getTreeProvider();
+ CommitFailedException e = EditorDiff.process(nextValidator ,
tp.asNodeState(source), tp.asNodeState(dest));
if (e != null) {
throw e;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionProviderImpl.java
Wed May 9 15:38:38 2018
@@ -24,10 +24,9 @@ import javax.annotation.Nullable;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
import org.apache.jackrabbit.oak.plugins.tree.TreeType;
-import org.apache.jackrabbit.oak.spi.version.VersionConstants;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import org.apache.jackrabbit.oak.spi.security.Context;
import
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
@@ -41,6 +40,7 @@ import org.apache.jackrabbit.oak.spi.sec
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
+import org.apache.jackrabbit.oak.spi.version.VersionConstants;
public class PermissionProviderImpl implements PermissionProvider,
AccessControlConstants, PermissionConstants, AggregatedPermissionProvider {
@@ -56,7 +56,7 @@ public class PermissionProviderImpl impl
private final Context ctx;
- private final RootProvider rootProvider;
+ private final ProviderCtx providerCtx;
private CompiledPermissions compiledPermissions;
@@ -68,33 +68,33 @@ public class PermissionProviderImpl impl
@Nonnull RestrictionProvider
restrictionProvider,
@Nonnull ConfigurationParameters options,
@Nonnull Context ctx,
- @Nonnull RootProvider rootProvider) {
+ @Nonnull ProviderCtx providerCtx) {
this.root = root;
this.workspaceName = workspaceName;
this.principals = principals;
this.restrictionProvider = restrictionProvider;
this.options = options;
this.ctx = ctx;
- this.rootProvider = rootProvider;
+ this.providerCtx = providerCtx;
- immutableRoot = rootProvider.createReadOnlyRoot(root);
+ immutableRoot = providerCtx.getRootProvider().createReadOnlyRoot(root);
}
@Override
public void refresh() {
- immutableRoot = rootProvider.createReadOnlyRoot(root);
+ immutableRoot = providerCtx.getRootProvider().createReadOnlyRoot(root);
getCompiledPermissions().refresh(immutableRoot, workspaceName);
}
@Nonnull
@Override
public Set<String> getPrivileges(@Nullable Tree tree) {
- return
getCompiledPermissions().getPrivileges(PermissionUtil.getImmutableTree(tree,
immutableRoot));
+ return
getCompiledPermissions().getPrivileges(PermissionUtil.getReadOnlyTree(tree,
immutableRoot));
}
@Override
public boolean hasPrivileges(@Nullable Tree tree, @Nonnull String...
privilegeNames) {
- return
getCompiledPermissions().hasPrivileges(PermissionUtil.getImmutableTree(tree,
immutableRoot), privilegeNames);
+ return
getCompiledPermissions().hasPrivileges(PermissionUtil.getReadOnlyTree(tree,
immutableRoot), privilegeNames);
}
@Nonnull
@@ -106,12 +106,12 @@ public class PermissionProviderImpl impl
@Nonnull
@Override
public TreePermission getTreePermission(@Nonnull Tree tree, @Nonnull
TreePermission parentPermission) {
- return
getCompiledPermissions().getTreePermission(PermissionUtil.getImmutableTree(tree,
immutableRoot), parentPermission);
+ return
getCompiledPermissions().getTreePermission(PermissionUtil.getReadOnlyTree(tree,
immutableRoot), parentPermission);
}
@Override
public boolean isGranted(@Nonnull Tree tree, @Nullable PropertyState
property, long permissions) {
- return
getCompiledPermissions().isGranted(PermissionUtil.getImmutableTree(tree,
immutableRoot), property, permissions);
+ return
getCompiledPermissions().isGranted(PermissionUtil.getReadOnlyTree(tree,
immutableRoot), property, permissions);
}
@Override
@@ -153,7 +153,7 @@ public class PermissionProviderImpl impl
@Nonnull
@Override
public TreePermission getTreePermission(@Nonnull Tree tree, @Nonnull
TreeType type, @Nonnull TreePermission parentPermission) {
- return
getCompiledPermissions().getTreePermission(PermissionUtil.getImmutableTree(tree,
immutableRoot), type, parentPermission);
+ return
getCompiledPermissions().getTreePermission(PermissionUtil.getReadOnlyTree(tree,
immutableRoot), type, parentPermission);
}
//--------------------------------------------------------------------------
@@ -166,7 +166,7 @@ public class PermissionProviderImpl impl
} else {
cp = CompiledPermissionImpl.create(immutableRoot,
workspaceName,
getPermissionStore(immutableRoot, workspaceName,
restrictionProvider), principals,
- restrictionProvider, options, ctx);
+ options, ctx, providerCtx);
}
compiledPermissions = cp;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionUtil.java
Wed May 9 15:38:38 2018
@@ -28,7 +28,7 @@ import org.apache.jackrabbit.oak.api.Pro
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
+import org.apache.jackrabbit.oak.plugins.tree.ReadOnly;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionConstants;
import org.apache.jackrabbit.oak.spi.security.principal.AdminPrincipal;
@@ -108,11 +108,11 @@ public final class PermissionUtil implem
return path;
}
- public static Tree getImmutableTree(@Nullable Tree tree, @Nonnull Root
immutableRoot) {
- if (tree instanceof ImmutableTree) {
+ public static Tree getReadOnlyTree(@Nullable Tree tree, @Nonnull Root
readOnlyRoot) {
+ if (tree instanceof ReadOnly) {
return tree;
} else {
- return (tree == null) ? null :
immutableRoot.getTree(tree.getPath());
+ return (tree == null) ? null :
readOnlyRoot.getTree(tree.getPath());
}
}
}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidator.java
Wed May 9 15:38:38 2018
@@ -25,11 +25,11 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.plugins.index.IndexConstants;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
import org.apache.jackrabbit.oak.plugins.lock.LockConstants;
import org.apache.jackrabbit.oak.plugins.nodetype.TypePredicate;
import org.apache.jackrabbit.oak.plugins.tree.TreeConstants;
-import org.apache.jackrabbit.oak.spi.version.VersionConstants;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.commit.VisibleValidator;
@@ -38,7 +38,7 @@ import org.apache.jackrabbit.oak.spi.sec
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
import org.apache.jackrabbit.oak.spi.state.NodeState;
import org.apache.jackrabbit.oak.spi.state.NodeStateUtils;
-import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
+import org.apache.jackrabbit.oak.spi.version.VersionConstants;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.apache.jackrabbit.JcrConstants.JCR_CREATED;
@@ -190,6 +190,11 @@ class PermissionValidator extends Defaul
return permissionProvider;
}
+ @Nonnull
+ TreeProvider getTreeProvider() {
+ return provider.getTreeProvider();
+ }
+
@CheckForNull
Validator checkPermissions(@Nonnull Tree tree, boolean isBefore,
long defaultPermission) throws
CommitFailedException {
@@ -200,7 +205,7 @@ class PermissionValidator extends Defaul
}
return null; // no need for further validation down the subtree
} else {
- NodeState ns = getNodeState(tree);
+ NodeState ns = provider.getTreeProvider().asNodeState(tree);
if (ns == null) {
throw new CommitFailedException(ACCESS, 0, "Access denied");
}
@@ -317,7 +322,7 @@ class PermissionValidator extends Defaul
// NOTE: we cannot rely on autocreated/protected definition as this
// doesn't reveal if a given property is expected to be never modified
// after creation.
- NodeState parentNs = getNodeState(parent);
+ NodeState parentNs = provider.getTreeProvider().asNodeState(parent);
if (JcrConstants.JCR_UUID.equals(name) &&
isReferenceable.apply(parentNs)) {
return true;
} else {
@@ -357,13 +362,4 @@ class PermissionValidator extends Defaul
private boolean isIndexDefinition(@Nonnull Tree tree) {
return tree.getPath().contains(IndexConstants.INDEX_DEFINITIONS_NAME);
}
-
- @CheckForNull
- private static NodeState getNodeState(@Nonnull Tree tree) {
- if (tree instanceof ImmutableTree) {
- return ((ImmutableTree) tree).getNodeState();
- } else {
- return null;
- }
- }
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/PermissionValidatorProvider.java
Wed May 9 15:38:38 2018
@@ -22,15 +22,14 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.MoveTracker;
import org.apache.jackrabbit.oak.spi.commit.Validator;
import org.apache.jackrabbit.oak.spi.commit.ValidatorProvider;
import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
import org.apache.jackrabbit.oak.spi.security.Context;
-import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionConstants;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
@@ -44,7 +43,6 @@ import org.apache.jackrabbit.oak.spi.sta
*/
public class PermissionValidatorProvider extends ValidatorProvider {
- private final SecurityProvider securityProvider;
private final AuthorizationConfiguration acConfig;
private final long jr2Permissions;
@@ -52,17 +50,15 @@ public class PermissionValidatorProvider
private final Set<Principal> principals;
private final MoveTracker moveTracker;
- private final RootProvider rootProvider;
- private final TreeProvider treeProvider;
+ private final ProviderCtx providerCtx;
private Context acCtx;
private Context userCtx;
- public PermissionValidatorProvider(@Nonnull SecurityProvider
securityProvider, @Nonnull String workspaceName,
+ public PermissionValidatorProvider(@Nonnull String workspaceName,
@Nonnull Set<Principal> principals,
@Nonnull MoveTracker moveTracker,
- @Nonnull RootProvider rootProvider,
@Nonnull TreeProvider treeProvider) {
- this.securityProvider = securityProvider;
- this.acConfig =
securityProvider.getConfiguration(AuthorizationConfiguration.class);
+ @Nonnull ProviderCtx providerCtx) {
+ this.acConfig =
providerCtx.getSecurityProvider().getConfiguration(AuthorizationConfiguration.class);
ConfigurationParameters params = acConfig.getParameters();
String compatValue =
params.getConfigValue(PermissionConstants.PARAM_PERMISSIONS_JR2, null,
String.class);
@@ -72,8 +68,7 @@ public class PermissionValidatorProvider
this.principals = principals;
this.moveTracker = moveTracker;
- this.rootProvider = rootProvider;
- this.treeProvider = treeProvider;
+ this.providerCtx = providerCtx;
}
//--------------------------------------------------< ValidatorProvider
>---
@@ -100,21 +95,25 @@ public class PermissionValidatorProvider
Context getUserContext() {
if (userCtx == null) {
- UserConfiguration uc =
securityProvider.getConfiguration(UserConfiguration.class);
+ UserConfiguration uc =
providerCtx.getSecurityProvider().getConfiguration(UserConfiguration.class);
userCtx = uc.getContext();
}
return userCtx;
}
+ TreeProvider getTreeProvider() {
+ return providerCtx.getTreeProvider();
+ }
+
boolean requiresJr2Permissions(long permission) {
return Permissions.includes(jr2Permissions, permission);
}
Root createReadOnlyRoot(@Nonnull NodeState nodeState) {
- return rootProvider.createReadOnlyRoot(nodeState);
+ return providerCtx.getRootProvider().createReadOnlyRoot(nodeState);
}
Tree createReadOnlyTree(@Nonnull NodeState nodeState) {
- return treeProvider.createReadOnlyTree(nodeState);
+ return providerCtx.getTreeProvider().createReadOnlyTree(nodeState);
}
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermission.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermission.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermission.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionTreePermission.java
Wed May 9 15:38:38 2018
@@ -22,7 +22,7 @@ import javax.annotation.Nonnull;
import com.google.common.collect.ImmutableSet;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.spi.version.VersionConstants;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -40,10 +40,12 @@ class VersionTreePermission implements T
private final Tree versionTree;
private final TreePermission versionablePermission;
+ private final TreeProvider treeProvider;
- VersionTreePermission(@Nonnull Tree versionTree, @Nonnull TreePermission
versionablePermission) {
+ VersionTreePermission(@Nonnull Tree versionTree, @Nonnull TreePermission
versionablePermission, @Nonnull TreeProvider treeProvider) {
this.versionTree = versionTree;
this.versionablePermission = versionablePermission;
+ this.treeProvider = treeProvider;
}
VersionTreePermission createChildPermission(@Nonnull Tree versionTree) {
@@ -51,9 +53,9 @@ class VersionTreePermission implements T
if (JCR_FROZENNODE.equals(versionTree.getName()) ||
NT_NAMES.contains(TreeUtil.getPrimaryTypeName(versionTree))) {
delegatee = versionablePermission;
} else {
- delegatee =
versionablePermission.getChildPermission(versionTree.getName(),
((ImmutableTree) versionTree).getNodeState());
+ delegatee =
versionablePermission.getChildPermission(versionTree.getName(),
treeProvider.asNodeState(versionTree));
}
- return new VersionTreePermission(versionTree, delegatee);
+ return new VersionTreePermission(versionTree, delegatee, treeProvider);
}
//-----------------------------------------------------< TreePermission
>---
@@ -61,7 +63,7 @@ class VersionTreePermission implements T
@Nonnull
@Override
public TreePermission getChildPermission(@Nonnull String childName,
@Nonnull NodeState childState) {
- return createChildPermission(new ImmutableTree((ImmutableTree)
versionTree, childName, childState));
+ return
createChildPermission(treeProvider.createReadOnlyTree(versionTree, childName,
childState));
}
@Override
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImpl.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImpl.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImpl.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeConfigurationImpl.java
Wed May 9 15:38:38 2018
@@ -79,7 +79,7 @@ public class PrivilegeConfigurationImpl
@Nonnull
@Override
public List<? extends ValidatorProvider> getValidators(@Nonnull String
workspaceName, @Nonnull Set<Principal> principals, @Nonnull MoveTracker
moveTracker) {
- return Collections.singletonList(new
PrivilegeValidatorProvider(getRootProvider()));
+ return Collections.singletonList(new
PrivilegeValidatorProvider(getRootProvider(), getTreeProvider()));
}
@Nonnull
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidator.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidator.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidator.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidator.java
Wed May 9 15:38:38 2018
@@ -25,10 +25,10 @@ import org.apache.jackrabbit.oak.api.Com
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
-import org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.spi.commit.DefaultValidator;
import org.apache.jackrabbit.oak.spi.commit.Validator;
+import org.apache.jackrabbit.oak.spi.namespace.NamespaceConstants;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBits;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeBitsProvider;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
@@ -49,11 +49,13 @@ class PrivilegeValidator extends Default
private final Root rootBefore;
private final Root rootAfter;
private final PrivilegeBitsProvider bitsProvider;
+ private final TreeProvider treeProvider;
- PrivilegeValidator(Root before, Root after) {
+ PrivilegeValidator(@Nonnull Root before, @Nonnull Root after, @Nonnull
TreeProvider treeProvider) {
rootBefore = before;
rootAfter = after;
bitsProvider = new PrivilegeBitsProvider(rootBefore);
+ this.treeProvider = treeProvider;
}
//----------------------------------------------------------< Validator
>---
@@ -80,7 +82,7 @@ class PrivilegeValidator extends Default
public Validator childNodeAdded(String name, NodeState after) throws
CommitFailedException {
if (isPrivilegeDefinition(after)) {
// make sure privileges have been initialized before
- getPrivilegesTree(rootBefore);
+ Tree parent = getPrivilegesTree(rootBefore);
// the following characteristics are expected to be validated
elsewhere:
// - permission to allow privilege registration -> permission
validator.
@@ -94,7 +96,7 @@ class PrivilegeValidator extends Default
}
// validate the definition
- Tree tree = new
ImmutableTree(ImmutableTree.ParentProvider.UNSUPPORTED, name, after);
+ Tree tree = treeProvider.createReadOnlyTree(parent, name, after);
validateDefinition(tree);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/privilege/PrivilegeValidatorProvider.java
Wed May 9 15:38:38 2018
@@ -20,6 +20,7 @@ import javax.annotation.Nonnull;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.SubtreeValidator;
import org.apache.jackrabbit.oak.spi.commit.Validator;
@@ -37,20 +38,23 @@ import static org.apache.jackrabbit.oak.
class PrivilegeValidatorProvider extends ValidatorProvider {
private final RootProvider rootProvider;
+ private final TreeProvider treeProvider;
- PrivilegeValidatorProvider(@Nonnull RootProvider rootProvider) {
+ PrivilegeValidatorProvider(@Nonnull RootProvider rootProvider, @Nonnull
TreeProvider treeProvider) {
this.rootProvider = rootProvider;
+ this.treeProvider = treeProvider;
}
@Nonnull
@Override
public Validator getRootValidator(
NodeState before, NodeState after, CommitInfo info) {
- return new SubtreeValidator(new PrivilegeValidator(createRoot(before),
createRoot(after)),
+ return new SubtreeValidator(new PrivilegeValidator(createRoot(before),
createRoot(after), treeProvider),
JCR_SYSTEM, REP_PRIVILEGES);
}
private Root createRoot(NodeState nodeState) {
return rootProvider.createReadOnlyRoot(nodeState);
}
+
}
\ No newline at end of file
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/accesscontrol/AccessControlValidatorTest.java
Wed May 9 15:38:38 2018
@@ -32,9 +32,12 @@ import org.apache.jackrabbit.oak.Abstrac
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore;
-import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
+import
org.apache.jackrabbit.oak.security.authorization.AuthorizationConfigurationImpl;
+import
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.Validator;
+import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
+import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
import
org.apache.jackrabbit.oak.spi.security.authorization.accesscontrol.AccessControlConstants;
import org.apache.jackrabbit.oak.spi.security.privilege.PrivilegeConstants;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -90,7 +93,8 @@ public class AccessControlValidatorTest
}
private AccessControlValidatorProvider createValidatorProvider() {
- return new AccessControlValidatorProvider(getSecurityProvider(),
getRootProvider(), getTreeProvider());
+ CompositeAuthorizationConfiguration cac =
(CompositeAuthorizationConfiguration)
getConfig(AuthorizationConfiguration.class);
+ return new
AccessControlValidatorProvider((AuthorizationConfigurationImpl)
cac.getDefaultConfig());
}
private NodeUtil createAcl() throws AccessDeniedException {
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/AbstractCompositeProviderTest.java
Wed May 9 15:38:38 2018
@@ -38,10 +38,9 @@ import org.apache.jackrabbit.oak.api.Roo
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.memory.PropertyStates;
-import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.plugins.tree.TreeUtil;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
import
org.apache.jackrabbit.oak.security.authorization.composite.CompositeAuthorizationConfiguration.CompositionType;
+import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
@@ -254,7 +253,7 @@ public abstract class AbstractCompositeP
String workspaceName = root.getContentSession().getWorkspaceName();
AuthorizationConfiguration config =
getConfig(AuthorizationConfiguration.class);
return new CompositePermissionProvider(root,
getAggregatedProviders(workspaceName, config, principals),
- config.getContext(), CompositionType.AND, getRootProvider());
+ config.getContext(), CompositionType.AND, getRootProvider(),
getTreeProvider());
}
CompositePermissionProvider createPermissionProviderOR(Principal...
principals) {
@@ -265,7 +264,7 @@ public abstract class AbstractCompositeP
String workspaceName = root.getContentSession().getWorkspaceName();
AuthorizationConfiguration config =
getConfig(AuthorizationConfiguration.class);
return new CompositePermissionProvider(root,
getAggregatedProviders(workspaceName, config, principals),
- config.getContext(), CompositionType.OR, getRootProvider());
+ config.getContext(), CompositionType.OR, getRootProvider(),
getTreeProvider());
}
@Test
@@ -573,7 +572,7 @@ public abstract class AbstractCompositeP
List<String> childNames = ImmutableList.of("test", "a", "b", "c",
"nonexisting");
Tree rootTree = readOnlyRoot.getTree(ROOT_PATH);
- NodeState ns = ((ImmutableTree) rootTree).getNodeState();
+ NodeState ns = getTreeProvider().asNodeState(rootTree);
TreePermission tp =
createPermissionProvider().getTreePermission(rootTree, TreePermission.EMPTY);
for (String cName : childNames) {
@@ -588,7 +587,7 @@ public abstract class AbstractCompositeP
List<String> childNames = ImmutableList.of("test", "a", "b", "c",
"nonexisting");
Tree rootTree = readOnlyRoot.getTree(ROOT_PATH);
- NodeState ns = ((ImmutableTree) rootTree).getNodeState();
+ NodeState ns = getTreeProvider().asNodeState(rootTree);
TreePermission tp =
createPermissionProviderOR().getTreePermission(rootTree, TreePermission.EMPTY);
for (String cName : childNames) {
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCoverageTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCoverageTest.java?rev=1831261&r1=1831260&r2=1831261&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCoverageTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/authorization/composite/CompositeProviderCoverageTest.java
Wed May 9 15:38:38 2018
@@ -32,7 +32,6 @@ import org.apache.jackrabbit.oak.api.Roo
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.commons.PathUtils;
import org.apache.jackrabbit.oak.plugins.tree.TreeLocation;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
import
org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider;
import
org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider;
@@ -116,7 +115,7 @@ public class CompositeProviderCoverageTe
List<String> childNames = ImmutableList.of("test", "a", "b", "c",
"nonexisting");
Tree rootTree = readOnlyRoot.getTree(ROOT_PATH);
- NodeState ns = ((ImmutableTree) rootTree).getNodeState();
+ NodeState ns = getTreeProvider().asNodeState(rootTree);
TreePermission tp =
createPermissionProvider().getTreePermission(rootTree, TreePermission.EMPTY);
for (String cName : childNames) {
@@ -132,7 +131,7 @@ public class CompositeProviderCoverageTe
List<String> childNames = ImmutableList.of("test", "a", "b", "c",
"nonexisting");
Tree rootTree = readOnlyRoot.getTree(ROOT_PATH);
- NodeState ns = ((ImmutableTree) rootTree).getNodeState();
+ NodeState ns = getTreeProvider().asNodeState(rootTree);
TreePermission tp =
createPermissionProviderOR().getTreePermission(rootTree, TreePermission.EMPTY);
for (String cName : childNames) {