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 2018/05/15 17:06:11 UTC
svn commit: r1831641 - in /jackrabbit/oak/trunk:
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/
oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/
oak-core/src/main/java/org/apache/jackrabbit/oak/security/author...
Author: angela
Date: Tue May 15 17:06:11 2018
New Revision: 1831641
URL: http://svn.apache.org/viewvc?rev=1831641&view=rev
Log:
OAK-7488 : VersionablePathHook should be located with authorization code
Added:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionablePathHook.java
- copied, changed from r1831260, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadOnlyVersionManager.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/AuthorizationConfigurationImpl.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VisibleChangesTest.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadOnlyVersionManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadOnlyVersionManager.java?rev=1831641&r1=1831640&r2=1831641&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadOnlyVersionManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/ReadOnlyVersionManager.java Tue May 15 17:06:11 2018
@@ -253,7 +253,6 @@ public abstract class ReadOnlyVersionMan
* versionable path property for the specified workspace is missing or if
* the given tree is not located within the tree structure defined by a version history.
*
- * @see VersionablePathHook
* @see VersionConstants#MIX_REP_VERSIONABLE_PATHS
*/
@CheckForNull
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=1831641&r1=1831640&r2=1831641&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 Tue May 15 17:06:11 2018
@@ -26,7 +26,7 @@ import javax.jcr.security.AccessControlM
import com.google.common.collect.ImmutableList;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.namepath.NamePathMapper;
-import org.apache.jackrabbit.oak.plugins.version.VersionablePathHook;
+import org.apache.jackrabbit.oak.security.authorization.permission.VersionablePathHook;
import org.apache.jackrabbit.oak.security.authorization.accesscontrol.AccessControlImporter;
import org.apache.jackrabbit.oak.security.authorization.accesscontrol.AccessControlManagerImpl;
import org.apache.jackrabbit.oak.security.authorization.accesscontrol.AccessControlValidatorProvider;
@@ -157,7 +157,7 @@ public class AuthorizationConfigurationI
@Override
public List<? extends CommitHook> getCommitHooks(@Nonnull String workspaceName) {
return ImmutableList.of(
- new VersionablePathHook(workspaceName),
+ new VersionablePathHook(workspaceName, this),
new PermissionHook(workspaceName, getRestrictionProvider(), mountInfoProvider, getRootProvider(), getTreeProvider()));
}
@@ -197,7 +197,7 @@ public class AuthorizationConfigurationI
@Nonnull
@Override
public PermissionProvider getPermissionProvider(@Nonnull Root root, @Nonnull String workspaceName,
- @Nonnull Set<Principal> principals) {
+ @Nonnull Set<Principal> principals) {
Context ctx = getSecurityProvider().getConfiguration(AuthorizationConfiguration.class).getContext();
if (mountInfoProvider.hasNonDefaultMounts()) {
Copied: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionablePathHook.java (from r1831260, jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java)
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionablePathHook.java?p2=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionablePathHook.java&p1=jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java&r1=1831260&r2=1831641&rev=1831641&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/version/VersionablePathHook.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/VersionablePathHook.java Tue May 15 17:06:11 2018
@@ -14,26 +14,27 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.jackrabbit.oak.plugins.version;
+package org.apache.jackrabbit.oak.security.authorization.permission;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
-
import javax.annotation.Nonnull;
import com.google.common.collect.ImmutableSet;
-
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.api.PropertyState;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.api.Type;
import org.apache.jackrabbit.oak.commons.PathUtils;
-import org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree;
-import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
+import org.apache.jackrabbit.oak.plugins.nodetype.ReadOnlyNodeTypeManager;
+import org.apache.jackrabbit.oak.plugins.version.ReadWriteVersionManager;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
import org.apache.jackrabbit.oak.spi.commit.CommitHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
+import org.apache.jackrabbit.oak.spi.nodetype.NodeTypeConstants;
import org.apache.jackrabbit.oak.spi.state.DefaultNodeStateDiff;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -51,9 +52,11 @@ import static org.apache.jackrabbit.oak.
public class VersionablePathHook implements CommitHook {
private final String workspaceName;
+ private final ProviderCtx providerCtx;
- public VersionablePathHook(String workspaceName) {
+ public VersionablePathHook(@Nonnull String workspaceName, @Nonnull ProviderCtx providerCtx) {
this.workspaceName = workspaceName;
+ this.providerCtx = providerCtx;
}
@Nonnull
@@ -63,10 +66,13 @@ public class VersionablePathHook impleme
throws CommitFailedException {
NodeBuilder rootBuilder = after.builder();
NodeBuilder vsRoot = rootBuilder.child(NodeTypeConstants.JCR_SYSTEM).child(NodeTypeConstants.JCR_VERSIONSTORAGE);
+
ReadWriteVersionManager vMgr = new ReadWriteVersionManager(vsRoot, rootBuilder);
+ ReadOnlyNodeTypeManager ntMgr = ReadOnlyNodeTypeManager.getInstance(providerCtx.getRootProvider().createReadOnlyRoot(rootBuilder.getNodeState()), NamePathMapper.DEFAULT);
+
List<CommitFailedException> exceptions = new ArrayList<CommitFailedException>();
after.compareAgainstBaseState(before,
- new Diff(vMgr, new Node(rootBuilder), exceptions));
+ new Diff(vMgr, ntMgr, new Node(rootBuilder), exceptions));
if (!exceptions.isEmpty()) {
throw exceptions.get(0);
}
@@ -81,13 +87,16 @@ public class VersionablePathHook impleme
private final class Diff extends DefaultNodeStateDiff implements VersionConstants {
private final ReadWriteVersionManager versionManager;
+ private final ReadOnlyNodeTypeManager ntMgr;
private final Node nodeAfter;
private final List<CommitFailedException> exceptions;
private Diff(@Nonnull ReadWriteVersionManager versionManager,
+ @Nonnull ReadOnlyNodeTypeManager ntMgr,
@Nonnull Node node,
@Nonnull List<CommitFailedException> exceptions) {
this.versionManager = versionManager;
+ this.ntMgr = ntMgr;
this.nodeAfter = node;
this.exceptions = exceptions;
}
@@ -116,11 +125,11 @@ public class VersionablePathHook impleme
}
Node node = new Node(nodeAfter, name);
return after.compareAgainstBaseState(
- before, new Diff(versionManager, node, exceptions));
+ before, new Diff(versionManager, ntMgr, node, exceptions));
}
private boolean setVersionablePath(PropertyState after) {
- if (JcrConstants.JCR_VERSIONHISTORY.equals(after.getName()) && nodeAfter.isVersionable(versionManager)) {
+ if (JcrConstants.JCR_VERSIONHISTORY.equals(after.getName()) && nodeAfter.isVersionable(ntMgr)) {
NodeBuilder vhBuilder;
try {
vhBuilder = versionManager.getOrCreateVersionHistory(
@@ -145,7 +154,7 @@ public class VersionablePathHook impleme
}
}
- private static final class Node {
+ private final class Node {
private final String path;
private final NodeBuilder builder;
@@ -160,9 +169,12 @@ public class VersionablePathHook impleme
this.path = PathUtils.concat(parent.path, name);
}
- private boolean isVersionable(ReadWriteVersionManager versionManager) {
- Tree tree = new ImmutableTree(ImmutableTree.ParentProvider.UNSUPPORTED, PathUtils.getName(path), builder.getNodeState());
- return versionManager.isVersionable(tree);
+ private boolean isVersionable(ReadOnlyNodeTypeManager ntMgr) {
+ // this is not 100% correct, because t.getPath() will
+ // not return the correct path for node after, but is
+ // sufficient to check if it is versionable
+ Tree tree = providerCtx.getTreeProvider().createReadOnlyTree(builder.getNodeState());
+ return ntMgr.isNodeType(tree, VersionConstants.MIX_VERSIONABLE);
}
}
}
\ No newline at end of file
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VisibleChangesTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VisibleChangesTest.java?rev=1831641&r1=1831640&r2=1831641&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VisibleChangesTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/VisibleChangesTest.java Tue May 15 17:06:11 2018
@@ -18,16 +18,21 @@ package org.apache.jackrabbit.oak.plugin
import java.util.List;
import java.util.Set;
-
import javax.annotation.Nonnull;
import com.google.common.collect.Sets;
-
import org.apache.jackrabbit.oak.api.CommitFailedException;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
-import org.apache.jackrabbit.oak.plugins.version.VersionablePathHook;
+import org.apache.jackrabbit.oak.plugins.tree.RootProvider;
+import org.apache.jackrabbit.oak.plugins.tree.TreeProvider;
+import org.apache.jackrabbit.oak.plugins.tree.impl.RootProviderService;
+import org.apache.jackrabbit.oak.plugins.tree.impl.TreeProviderService;
+import org.apache.jackrabbit.oak.security.authorization.ProviderCtx;
+import org.apache.jackrabbit.oak.security.authorization.permission.VersionablePathHook;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
+import org.apache.jackrabbit.oak.spi.mount.MountInfoProvider;
+import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
import org.junit.Test;
@@ -66,7 +71,31 @@ public class VisibleChangesTest {
}
store.paths.clear();
- VersionablePathHook hook = new VersionablePathHook("default");
+ VersionablePathHook hook = new VersionablePathHook("default", new ProviderCtx() {
+ @Nonnull
+ @Override
+ public SecurityProvider getSecurityProvider() {
+ throw new UnsupportedOperationException();
+ }
+
+ @Nonnull
+ @Override
+ public TreeProvider getTreeProvider() {
+ return new TreeProviderService();
+ }
+
+ @Nonnull
+ @Override
+ public RootProvider getRootProvider() {
+ return new RootProviderService();
+ }
+
+ @Nonnull
+ @Override
+ public MountInfoProvider getMountInfoProvider() {
+ throw new UnsupportedOperationException();
+ }
+ });
hook.processCommit(ns.getRoot(), builder.getNodeState(), CommitInfo.EMPTY);
assertEquals("Must not query for hidden paths: " + store.paths.toString(),
0, store.paths.size());