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 2012/08/10 17:53:15 UTC
svn commit: r1371751 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
Author: angela
Date: Fri Aug 10 15:53:15 2012
New Revision: 1371751
URL: http://svn.apache.org/viewvc?rev=1371751&view=rev
Log:
OAK-51 : Implement JCR Access Control Management (work in progress)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java?rev=1371751&r1=1371750&r2=1371751&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/core/TreeImpl.java Fri Aug 10 15:53:15 2012
@@ -116,7 +116,7 @@ public class TreeImpl implements Tree, P
@Override
public Tree getParent() {
- if (parent != null && canRead(parent.getPath())) {
+ if (parent != null && canRead(parent)) {
return parent;
} else {
return null;
@@ -125,7 +125,7 @@ public class TreeImpl implements Tree, P
@Override
public PropertyState getProperty(String name) {
- if (canReadProperty(buildChildPath(name))) {
+ if (canReadProperty(name)) {
return internalGetProperty(name);
} else {
return null;
@@ -135,7 +135,7 @@ public class TreeImpl implements Tree, P
@Override
public Status getPropertyStatus(String name) {
// TODO: see OAK-212
- if (!canReadProperty(buildChildPath(name))) {
+ if (!canReadProperty(name)) {
return null;
}
@@ -199,7 +199,7 @@ public class TreeImpl implements Tree, P
@Override
public boolean apply(PropertyState propertyState) {
if (propertyState != null) {
- return canReadProperty(buildChildPath(propertyState.getName()));
+ return canReadProperty(propertyState.getName());
} else {
return false;
}
@@ -209,8 +209,9 @@ public class TreeImpl implements Tree, P
@Override
public TreeImpl getChild(String name) {
- if (canRead(buildChildPath(name))) {
- return internalGetChild(name);
+ TreeImpl child = internalGetChild(name);
+ if (child != null && canRead(child)) {
+ return child;
} else {
return null;
}
@@ -268,7 +269,7 @@ public class TreeImpl implements Tree, P
@Override
public boolean apply(Tree tree) {
if (tree != null) {
- return canRead(tree.getPath());
+ return canRead(tree);
} else {
return false;
}
@@ -403,18 +404,14 @@ public class TreeImpl implements Tree, P
*/
@CheckForNull
TreeImpl getTree(String path) {
- TreeImpl tree = null;
- if (canRead(buildChildPath(path))) {
- TreeImpl child = this;
- for (String name : elements(path)) {
- child = child.internalGetChild(name);
- if (child == null) {
- return null;
- }
+ TreeImpl child = this;
+ for (String name : elements(path)) {
+ child = child.internalGetChild(name);
+ if (child == null) {
+ return null;
}
- tree = child;
}
- return tree;
+ return (canRead(child)) ? child : null;
}
//------------------------------------------------------------< private >---
@@ -450,20 +447,17 @@ public class TreeImpl implements Tree, P
}
}
- private String buildChildPath(String relPath) {
- StringBuilder sb = new StringBuilder();
- buildPath(sb);
- sb.append('/');
- sb.append(relPath);
- return sb.toString();
+ private boolean canRead(Tree tree) {
+ // FIXME: special handling for access control item and version content
+ return root.getPermissions().canRead(tree.getPath(), false);
}
- private boolean canRead(String path) {
- return root.getPermissions().canRead(path, false);
- }
+ private boolean canReadProperty(String name) {
+ StringBuilder path = new StringBuilder();
+ path.append(getPath()).append(name);
- private boolean canReadProperty(String path) {
- return root.getPermissions().canRead(path, true);
+ // FIXME: special handling for access control item and version content
+ return root.getPermissions().canRead(path.toString(), true);
}
private static boolean isSame(NodeState state1, NodeState state2) {