Search in sources :

Example 46 with TreePermission

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;
    }
}
Also used : Tree(org.apache.jackrabbit.oak.api.Tree) TreePermission(org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission) Test(org.junit.Test)

Example 47 with TreePermission

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;
}
Also used : TreePermission(org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission)

Example 48 with TreePermission

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);
    }
}
Also used : TreePermission(org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission)

Example 49 with TreePermission

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;
}
Also used : TreePermission(org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission)

Example 50 with TreePermission

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);
    }
}
Also used : TreeType(org.apache.jackrabbit.oak.plugins.tree.TreeType) AggregatedPermissionProvider(org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider) TreePermission(org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission) ImmutableTree(org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree)

Aggregations

TreePermission (org.apache.jackrabbit.oak.spi.security.authorization.permission.TreePermission)109 Test (org.junit.Test)94 Tree (org.apache.jackrabbit.oak.api.Tree)53 AbstractSecurityTest (org.apache.jackrabbit.oak.AbstractSecurityTest)41 ImmutableTree (org.apache.jackrabbit.oak.plugins.tree.impl.ImmutableTree)22 PermissionProvider (org.apache.jackrabbit.oak.spi.security.authorization.permission.PermissionProvider)11 NodeState (org.apache.jackrabbit.oak.spi.state.NodeState)10 AggregatedPermissionProvider (org.apache.jackrabbit.oak.spi.security.authorization.permission.AggregatedPermissionProvider)8 PropertyState (org.apache.jackrabbit.oak.api.PropertyState)6 Nonnull (javax.annotation.Nonnull)4 AccessControlManager (javax.jcr.security.AccessControlManager)4 Root (org.apache.jackrabbit.oak.api.Root)4 JackrabbitAccessControlList (org.apache.jackrabbit.api.security.JackrabbitAccessControlList)3 TreeType (org.apache.jackrabbit.oak.plugins.tree.TreeType)3 NodeUtil (org.apache.jackrabbit.oak.util.NodeUtil)3 Field (java.lang.reflect.Field)2 AuthorizationConfiguration (org.apache.jackrabbit.oak.spi.security.authorization.AuthorizationConfiguration)2 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 CheckForNull (javax.annotation.CheckForNull)1