diff --git a/config/alfresco/subsystems/Search/common-opencmis-context.xml b/config/alfresco/subsystems/Search/common-opencmis-context.xml
index 7814af93fe..bf97c17666 100644
--- a/config/alfresco/subsystems/Search/common-opencmis-context.xml
+++ b/config/alfresco/subsystems/Search/common-opencmis-context.xml
@@ -51,7 +51,7 @@
-
+
diff --git a/config/alfresco/subsystems/Search/common-search-context.xml b/config/alfresco/subsystems/Search/common-search-context.xml
index 9da3680d6c..47ef8ceac5 100644
--- a/config/alfresco/subsystems/Search/common-search-context.xml
+++ b/config/alfresco/subsystems/Search/common-search-context.xml
@@ -93,7 +93,7 @@
-
+
@@ -120,4 +120,31 @@
+
+
+ org.alfresco.repo.search.impl.querymodel.QueryEngine
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ org.alfresco.repo.search.impl.querymodel.QueryEngine.executeQuery=ACL_ALLOW,AFTER_ACL_NODE.sys:base.Read
+ org.alfresco.repo.search.impl.querymodel.QueryEngine.getQueryModelFactory=ACL_ALLOW
+
+
+
+
+
diff --git a/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationProvider.java b/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationProvider.java
index e9c62d9679..e3de6b0743 100644
--- a/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationProvider.java
+++ b/source/java/org/alfresco/repo/security/permissions/impl/acegi/ACLEntryAfterInvocationProvider.java
@@ -500,6 +500,11 @@ public class ACLEntryAfterInvocationProvider implements AfterInvocationProvider,
{
ResultSet raw = returnedObject.getWrapped();
+ // Check for nested evaluation FilteringResultSet is only wrapped here
+ if(raw instanceof FilteringResultSet)
+ {
+ return returnedObject;
+ }
ResultSet filteredForPermissions = decide(authentication, object, config, raw);
PagingLuceneResultSet newPaging = new PagingLuceneResultSet(filteredForPermissions, returnedObject.getResultSetMetaData().getSearchParameters(), nodeService);
return newPaging;
diff --git a/source/test-java/org/alfresco/repo/search/SearchServiceTest.java b/source/test-java/org/alfresco/repo/search/SearchServiceTest.java
index 1e0ad3309a..c49a14d1ca 100644
--- a/source/test-java/org/alfresco/repo/search/SearchServiceTest.java
+++ b/source/test-java/org/alfresco/repo/search/SearchServiceTest.java
@@ -123,30 +123,30 @@ public class SearchServiceTest extends TestCase
rootNodeRef = nodeService.getRootNode(storeRef);
n1 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}01"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
pubPermissionService.setPermission(n1, "andy", "Read", true);
n2 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}02"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
pubPermissionService.setPermission(n2, "andy", "Read", true);
n3 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}03"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
pubPermissionService.setPermission(n3, "andy", "Read", true);
n4 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}04"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
pubPermissionService.setPermission(n4, "andy", "Read", true);
n5 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}05"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
pubPermissionService.setPermission(n5, "andy", "Read", true);
n6 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}06"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
n7 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}07"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
n8 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}08"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
n9 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}09"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
n10 = nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CHILDREN, QName.createQName("{test}10"),
- ContentModel.TYPE_CONTAINER).getChildRef();
+ ContentModel.TYPE_FOLDER).getChildRef();
}
@@ -259,4 +259,19 @@ public class SearchServiceTest extends TestCase
assertEquals(results.getResultSetMetaData().getPermissionEvaluationMode(), PermissionEvaluationMode.EAGER);
results.close();
}
+
+ public void testAndyCMIS()
+ {
+ authenticationComponent.setCurrentUser("andy");
+ SearchParameters sp = new SearchParameters();
+ sp.setLanguage(SearchService.LANGUAGE_CMIS_ALFRESCO);
+ sp.setQuery("select * from cmis:folder");
+ sp.addStore(rootNodeRef.getStoreRef());
+ ResultSet results = pubSearchService.query(sp);
+ assertEquals(results.length(), 5);
+ assertNotNull(results.getResultSetMetaData());
+ assertEquals(results.getResultSetMetaData().getLimitedBy(), LimitBy.UNLIMITED);
+ assertEquals(results.getResultSetMetaData().getPermissionEvaluationMode(), PermissionEvaluationMode.EAGER);
+ results.close();
+ }
}