use of org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission in project jackrabbit-oak by apache.
the class CompositeProviderFullScopeTest method testTreePermissionCanReadAdmin.
@Test
public void testTreePermissionCanReadAdmin() {
TreePermission parentPermission = TreePermission.EMPTY;
for (String nodePath : TP_PATHS) {
Tree tree = readOnlyRoot.getTree(nodePath);
TreePermission tp = cppAdminUser.getTreePermission(tree, parentPermission);
assertTrue(nodePath, tp.canRead());
assertFalse(nodePath, tp.canRead(PROPERTY_STATE));
parentPermission = tp;
}
}
use of org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission in project jackrabbit-oak by apache.
the class CompositeTreePermission method grantsRead.
private boolean grantsRead(@Nullable PropertyState property) {
if (property != null && canReadProperties()) {
return true;
}
boolean readable = false;
for (int i = 0; i < providers.length; i++) {
TreePermission tp = treePermissions[i];
long supported = providers[i].supportedPermissions(tp, property, (property == null) ? Permissions.READ_NODE : Permissions.READ_PROPERTY);
if (doEvaluate(supported)) {
readable = (property == null) ? tp.canRead() : tp.canRead(property);
if (!readable) {
break;
}
}
}
return readable;
}
use of org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission in project jackrabbit-oak by apache.
the class CompositeTreePermission method create.
static TreePermission create(@Nonnull ImmutableTree rootTree, @Nonnull TreeTypeProvider typeProvider, @Nonnull AggregatedPermissionProvider[] providers) {
switch(providers.length) {
case 0:
return TreePermission.EMPTY;
case 1:
return providers[0].getTreePermission(rootTree, TreeType.DEFAULT, TreePermission.EMPTY);
default:
int cnt = 0;
TreePermission[] treePermissions = new TreePermission[providers.length];
for (int i = 0; i < providers.length; i++) {
TreePermission tp = providers[i].getTreePermission(rootTree, TreeType.DEFAULT, TreePermission.EMPTY);
if (!isValid(tp)) {
cnt++;
}
treePermissions[i] = tp;
}
return new CompositeTreePermission(rootTree, TreeType.DEFAULT, typeProvider, providers, treePermissions, cnt);
}
}
use of org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission in project jackrabbit-oak by apache.
the class CompositeTreePermission method grantsPermission.
//------------------------------------------------------------< private >---
private boolean grantsPermission(long permissions, @Nullable PropertyState property) {
boolean isGranted = false;
long coveredPermissions = Permissions.NO_PERMISSION;
for (int i = 0; i < providers.length; i++) {
TreePermission tp = treePermissions[i];
long supported = providers[i].supportedPermissions(tp, property, permissions);
if (doEvaluate(supported)) {
isGranted = (property == null) ? tp.isGranted(supported) : tp.isGranted(supported, property);
coveredPermissions |= supported;
if (!isGranted) {
return false;
}
}
}
return isGranted && coveredPermissions == permissions;
}
use of org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission in project jackrabbit-oak by apache.
the class CompositeTreePermission method create.
private static TreePermission create(@Nonnull LazyTree lazyTree, @Nonnull String childName, @Nonnull NodeState childState, @Nonnull CompositeTreePermission parentPermission) {
switch(parentPermission.childSize) {
case 0:
return TreePermission.EMPTY;
case 1:
TreePermission parent = null;
for (TreePermission tp : parentPermission.treePermissions) {
if (isValid(tp)) {
parent = tp;
break;
}
}
return (parent == null) ? TreePermission.EMPTY : parent.getChildPermission(childName, childState);
default:
ImmutableTree tree = lazyTree.get();
TreeType type = getType(tree, parentPermission);
AggregatedPermissionProvider[] pvds = new AggregatedPermissionProvider[parentPermission.childSize];
TreePermission[] tps = new TreePermission[parentPermission.childSize];
int cnt = 0;
for (int i = 0, j = 0; i < parentPermission.providers.length; i++) {
parent = parentPermission.treePermissions[i];
if (isValid(parent)) {
AggregatedPermissionProvider provider = parentPermission.providers[i];
TreePermission tp = provider.getTreePermission(tree, type, parent);
if (!isValid(tp)) {
cnt++;
}
tps[j] = tp;
pvds[j] = provider;
j++;
}
}
return new CompositeTreePermission(tree, type, parentPermission.typeProvider, pvds, tps, cnt);
}
}
Aggregations