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() {


Reply via email to