@Nonnull private TreePermission buildParentPermission(@Nonnull Tree tree) { List<Tree> trees = new ArrayList<Tree>(); while (!tree.isRoot()) { tree = tree.getParent(); trees.add(0, tree); } TreePermission pp = EMPTY; TreeType type = TreeType.DEFAULT; for (Tree tr : trees) { type = typeProvider.getType(tr, type); pp = new TreePermissionImpl(tr, type, pp); } return pp; }
@Override public boolean canRead() { boolean isAcTree = isAcTree(); if (!isAcTree && isReadableTree) { return true; } if (readStatus == null) { readStatus = ReadStatus.DENY_THIS; long permission = (isAcTree) ? Permissions.READ_ACCESS_CONTROL : Permissions.READ_NODE; PrivilegeBits requiredBits = READ_BITS.get(permission); Iterator<PermissionEntry> it = getIterator(null, permission); while (it.hasNext()) { PermissionEntry entry = it.next(); if (entry.privilegeBits.includes(requiredBits)) { readStatus = ReadStatus.create(entry, permission, skipped); break; } else if (permission == Permissions.READ_NODE && entry.privilegeBits.includes(READ_BITS.get(Permissions.READ_PROPERTY))) { skipped = true; } } } return readStatus.allowsThis(); }
case VERSION: if (ReadOnlyVersionManager.isVersionStoreTree(tree)) { return new TreePermissionImpl(tree, TreeType.VERSION, parentPermission); } else { Tree versionableTree = getVersionManager().getVersionable(tree, workspaceName); return new RepoPolicyTreePermission(getRepositoryPermission()); } else { return new TreePermissionImpl(tree, type, parentPermission); return new TreePermissionImpl(tree, type, parentPermission);
case VERSION: if (ReadOnlyVersionManager.isVersionStoreTree(tree)) { return new TreePermissionImpl(tree, TreeType.VERSION, parentPermission); } else { Tree versionableTree = getVersionManager().getVersionable(tree, workspaceName); return new RepoPolicyTreePermission(getRepositoryPermission()); } else { return new TreePermissionImpl(tree, type, parentPermission); return new TreePermissionImpl(tree, type, parentPermission);
case VERSION: if (ReadOnlyVersionManager.isVersionStoreTree(tree)) { return new TreePermissionImpl(tree, TreeType.VERSION, parentPermission); } else { Tree versionableTree = getVersionManager().getVersionable(tree, workspaceName); return new RepoPolicyTreePermission(getRepositoryPermission()); } else { return new TreePermissionImpl(tree, type, parentPermission); return new TreePermissionImpl(tree, type, parentPermission);
@Override public boolean canRead() { boolean isAcTree = isAcTree(); if (!isAcTree && isReadableTree) { return true; } if (readStatus == null) { readStatus = ReadStatus.DENY_THIS; long permission = (isAcTree) ? Permissions.READ_ACCESS_CONTROL : Permissions.READ_NODE; PrivilegeBits requiredBits = READ_BITS.get(permission); Iterator<PermissionEntry> it = getIterator(null, permission); while (it.hasNext()) { PermissionEntry entry = it.next(); if (entry.privilegeBits.includes(requiredBits)) { readStatus = ReadStatus.create(entry, permission, skipped); break; } else if (permission == Permissions.READ_NODE && entry.privilegeBits.includes(READ_BITS.get(Permissions.READ_PROPERTY))) { skipped = true; } } } return readStatus.allowsThis(); }
@Override public boolean canRead() { boolean isAcTree = isAcTree(); if (!isAcTree && isReadableTree) { return true; } if (readStatus == null) { readStatus = ReadStatus.DENY_THIS; long permission = (isAcTree) ? Permissions.READ_ACCESS_CONTROL : Permissions.READ_NODE; PrivilegeBits requiredBits = READ_BITS.get(permission); Iterator<PermissionEntry> it = getIterator(null, permission); while (it.hasNext()) { PermissionEntry entry = it.next(); if (entry.privilegeBits.includes(requiredBits)) { readStatus = ReadStatus.create(entry, permission, skipped); break; } else if (permission == Permissions.READ_NODE && entry.privilegeBits.includes(READ_BITS.get(Permissions.READ_PROPERTY))) { skipped = true; } } } return readStatus.allowsThis(); }
@Override public boolean canRead(@Nonnull PropertyState property) { boolean isAcTree = isAcTree(); if (!isAcTree && isReadableTree) { return true; } if (readStatus != null && readStatus.allowsProperties()) { return true; } long permission = (isAcTree) ? Permissions.READ_ACCESS_CONTROL : Permissions.READ_PROPERTY; Iterator<PermissionEntry> it = getIterator(property, permission); while (it.hasNext()) { PermissionEntry entry = it.next(); if (entry.privilegeBits.includes(READ_BITS.get(permission))) { return entry.isAllow; } } return false; }
@Override public boolean canRead(@NotNull PropertyState property) { boolean isAcTree = isAcTree(); if (!isAcTree && isReadableTree) { return true; } if (readStatus != null && readStatus.allowsProperties()) { return true; } long permission = (isAcTree) ? Permissions.READ_ACCESS_CONTROL : Permissions.READ_PROPERTY; Iterator<PermissionEntry> it = getIterator(property, permission); while (it.hasNext()) { PermissionEntry entry = it.next(); if (entry.privilegeBits.includes(READ_BITS.get(permission))) { return entry.isAllow; } } return false; }
@Override public boolean canRead(@NotNull PropertyState property) { boolean isAcTree = isAcTree(); if (!isAcTree && isReadableTree) { return true; } if (readStatus != null && readStatus.allowsProperties()) { return true; } long permission = (isAcTree) ? Permissions.READ_ACCESS_CONTROL : Permissions.READ_PROPERTY; Iterator<PermissionEntry> it = getIterator(property, permission); while (it.hasNext()) { PermissionEntry entry = it.next(); if (entry.privilegeBits.includes(READ_BITS.get(permission))) { return entry.isAllow; } } return false; }
@Nonnull private TreePermission buildVersionDelegatee(@Nonnull Tree versionableTree) { if (!versionableTree.exists()) { return TreePermission.EMPTY; } else if (versionableTree.isRoot()) { return createRootPermission(versionableTree); } TreeType type = typeProvider.getType(versionableTree); switch (type) { case HIDDEN : return ALL; case INTERNAL : return EMPTY; // case VERSION is never expected here default: return new TreePermissionImpl(versionableTree, type, buildParentPermission(versionableTree)); } }
@NotNull private TreePermission buildParentPermission(@NotNull Tree tree) { List<Tree> trees = new ArrayList<>(); while (!tree.isRoot()) { tree = tree.getParent(); trees.add(0, tree); } TreePermission pp = EMPTY; TreeType type = TreeType.DEFAULT; for (Tree tr : trees) { type = typeProvider.getType(tr, type); pp = new TreePermissionImpl(tr, type, pp); } return pp; }
@NotNull private TreePermission buildVersionDelegatee(@NotNull Tree versionableTree) { if (!versionableTree.exists()) { return TreePermission.EMPTY; } else if (versionableTree.isRoot()) { return createRootPermission(versionableTree); } TreeType type = typeProvider.getType(versionableTree); switch (type) { case HIDDEN : return ALL; case INTERNAL : return EMPTY; // case VERSION is never expected here default: return new TreePermissionImpl(versionableTree, type, buildParentPermission(versionableTree)); } }
@NotNull private TreePermission buildVersionDelegatee(@NotNull Tree versionableTree) { if (!versionableTree.exists()) { return TreePermission.EMPTY; } else if (versionableTree.isRoot()) { return createRootPermission(versionableTree); } TreeType type = typeProvider.getType(versionableTree); switch (type) { case HIDDEN : return ALL; case INTERNAL : return EMPTY; // case VERSION is never expected here default: return new TreePermissionImpl(versionableTree, type, buildParentPermission(versionableTree)); } }
private TreePermissionImpl createRootPermission(@Nonnull Tree rootTree) { return new TreePermissionImpl(rootTree, TreeType.DEFAULT, EMPTY); }
@NotNull private TreePermission buildParentPermission(@NotNull Tree tree) { List<Tree> trees = new ArrayList<>(); while (!tree.isRoot()) { tree = tree.getParent(); trees.add(0, tree); } TreePermission pp = EMPTY; TreeType type = TreeType.DEFAULT; for (Tree tr : trees) { type = typeProvider.getType(tr, type); pp = new TreePermissionImpl(tr, type, pp); } return pp; }
private TreePermissionImpl createRootPermission(@NotNull Tree rootTree) { return new TreePermissionImpl(rootTree, TreeType.DEFAULT, EMPTY); }
private Iterator<PermissionEntry> getIterator(@Nullable PropertyState property, long permissions) { EntryPredicate predicate = new EntryPredicate(tree, property, Permissions.respectParentPermissions(permissions)); return getIterator(predicate); }
private TreePermissionImpl createRootPermission(@NotNull Tree rootTree) { return new TreePermissionImpl(rootTree, TreeType.DEFAULT, EMPTY); }
private Iterator<PermissionEntry> getIterator(@Nullable PropertyState property, long permissions) { EntryPredicate predicate = new EntryPredicate(tree, property, Permissions.respectParentPermissions(permissions)); return getIterator(predicate); }