Author: stillalex Date: Tue Nov 6 08:29:20 2018 New Revision: 1845875 URL: http://svn.apache.org/viewvc?rev=1845875&view=rev Log: OAK-7870 Reduce permission store lookups for empty principal sets - same change for TreePermissionImpl#isGranted
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java?rev=1845875&r1=1845874&r2=1845875&view=diff ============================================================================== --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java (original) +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authorization/permission/CompiledPermissionImpl.java Tue Nov 6 08:29:20 2018 @@ -568,21 +568,33 @@ final class CompiledPermissionImpl imple @Override public boolean isGranted(long permissions) { EntryPredicate predicate = new EntryPredicate(tree, null, Permissions.respectParentPermissions(permissions)); - Iterator<PermissionEntry> it = concat(new LazyIterator(this, true, predicate), new LazyIterator(this, false, predicate)); + Iterator<PermissionEntry> it = getIterator(predicate); return hasPermissions(it, predicate, permissions, tree.getPath()); } @Override public boolean isGranted(long permissions, @NotNull PropertyState property) { EntryPredicate predicate = new EntryPredicate(tree, property, Permissions.respectParentPermissions(permissions)); - Iterator<PermissionEntry> it = concat(new LazyIterator(this, true, predicate), new LazyIterator(this, false, predicate)); + Iterator<PermissionEntry> it = getIterator(predicate); return hasPermissions(it, predicate, permissions, tree.getPath()); } //--------------------------------------------------------< private >--- private Iterator<PermissionEntry> getIterator(@Nullable PropertyState property, long permissions) { EntryPredicate predicate = new EntryPredicate(tree, property, Permissions.respectParentPermissions(permissions)); - return concat(new LazyIterator(this, true, predicate), new LazyIterator(this, false, predicate)); + return getIterator(predicate); + } + + private Iterator<PermissionEntry> getIterator(@NotNull EntryPredicate predicate) { + if (userStore != null && groupStore != null) { + return concat(new LazyIterator(this, true, predicate), new LazyIterator(this, false, predicate)); + } else if (userStore != null) { + return new LazyIterator(this, true, predicate); + } else if (groupStore != null) { + return new LazyIterator(this, false, predicate); + } else { + return Collections.emptyIterator(); + } } private Iterator<PermissionEntry> getUserEntries() {