From: <die...@us...> - 2010-09-15 16:57:58
|
Revision: 3112 http://openutils.svn.sourceforge.net/openutils/?rev=3112&view=rev Author: diego_schivo Date: 2010-09-15 16:57:51 +0000 (Wed, 15 Sep 2010) Log Message: ----------- CRIT-28 failing test + fix Modified Paths: -------------- trunk/magnolia-test-webapp/src/main/webapp/WEB-INF/bootstrap/userroles.criteria-dogsexcluded.xml trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java Modified: trunk/magnolia-test-webapp/src/main/webapp/WEB-INF/bootstrap/userroles.criteria-dogsexcluded.xml =================================================================== --- trunk/magnolia-test-webapp/src/main/webapp/WEB-INF/bootstrap/userroles.criteria-dogsexcluded.xml 2010-09-14 14:08:49 UTC (rev 3111) +++ trunk/magnolia-test-webapp/src/main/webapp/WEB-INF/bootstrap/userroles.criteria-dogsexcluded.xml 2010-09-15 16:57:51 UTC (rev 3112) @@ -26,7 +26,7 @@ <sv:value>2010-08-25T17:08:19.609+02:00</sv:value> </sv:property> <sv:property sv:name="mgnl:lastmodified" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.125+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.109+02:00</sv:value> </sv:property> <sv:property sv:name="mgnl:template" sv:type="String"> <sv:value/> @@ -40,7 +40,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>6cf97934-4eb8-4309-bf19-8189568dd844</sv:value> + <sv:value>9aa498c5-093b-47ca-bfc8-405dbe5808f4</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -53,7 +53,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.125+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.125+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -65,7 +65,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>b613e8c4-e349-4d75-bb56-f41c191979e8</sv:value> + <sv:value>892441cf-0ec6-4f76-9e2c-9041aa06e46d</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -78,7 +78,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.125+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.125+02:00</sv:value> </sv:property> </sv:node> <sv:node sv:name="0"> @@ -89,12 +89,74 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>262e747f-71ef-4de5-8762-98de7d813f58</sv:value> + <sv:value>04dd1e76-7750-4fb1-96f8-4f3b6b89317f</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="path" sv:type="String"> + <sv:value>/Criteria/pets</sv:value> + </sv:property> + <sv:property sv:name="permissions" sv:type="Long"> + <sv:value>8</sv:value> + </sv:property> + <sv:node sv:name="MetaData"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:metaData</sv:value> + </sv:property> + <sv:property sv:name="jcr:createdBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:property sv:name="mgnl:creationdate" sv:type="Date"> + <sv:value>2010-09-15T18:53:31.125+02:00</sv:value> + </sv:property> + </sv:node> + </sv:node> + <sv:node sv:name="00"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:contentNode</sv:value> + </sv:property> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> + <sv:value>mix:lockable</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>ab7111e6-6b14-481f-bbfc-ab2758a95d7e</sv:value> + </sv:property> + <sv:property sv:name="jcr:createdBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:property sv:name="path" sv:type="String"> + <sv:value>/Criteria/pets/*</sv:value> + </sv:property> + <sv:property sv:name="permissions" sv:type="Long"> + <sv:value>8</sv:value> + </sv:property> + <sv:node sv:name="MetaData"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:metaData</sv:value> + </sv:property> + <sv:property sv:name="jcr:createdBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:property sv:name="mgnl:creationdate" sv:type="Date"> + <sv:value>2010-09-15T18:53:31.125+02:00</sv:value> + </sv:property> + </sv:node> + </sv:node> + <sv:node sv:name="01"> + <sv:property sv:name="jcr:primaryType" sv:type="Name"> + <sv:value>mgnl:contentNode</sv:value> + </sv:property> + <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> + <sv:value>mix:lockable</sv:value> + </sv:property> + <sv:property sv:name="jcr:uuid" sv:type="String"> + <sv:value>f274be87-7c39-45e0-ab7e-1e1e41420411</sv:value> + </sv:property> + <sv:property sv:name="jcr:createdBy" sv:type="String"> + <sv:value>admin</sv:value> + </sv:property> + <sv:property sv:name="path" sv:type="String"> <sv:value>/Criteria/pets/dogs/*</sv:value> </sv:property> <sv:property sv:name="permissions" sv:type="Long"> @@ -108,7 +170,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.125+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.125+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -121,7 +183,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>20ffc05c-14e3-491b-a170-aa5ca47f118b</sv:value> + <sv:value>93b69fa4-5649-4ff5-b244-58b5240a15cb</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -134,7 +196,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.140+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.125+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -146,7 +208,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>649c759c-67ef-4938-8129-04eaa724cb0b</sv:value> + <sv:value>eed97805-c216-4d27-a00f-9441d91eca4c</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -159,7 +221,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.140+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.140+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -171,7 +233,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>0055b068-2585-4ea1-8377-217821b14e6c</sv:value> + <sv:value>3836906f-ff3f-47ce-9225-6a5616ae98ed</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -184,7 +246,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.140+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.140+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -196,7 +258,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>b6c4fced-0263-43a5-bbd5-5fe5b78f1941</sv:value> + <sv:value>2ae8debb-8965-46ed-b7e7-db7f71a228f6</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -209,7 +271,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.140+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.140+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -221,7 +283,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>af5d6b9c-c0f8-4959-8f5d-50a8c24bb809</sv:value> + <sv:value>f5c971d6-a88b-4db0-b89a-99cdb81c9368</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -234,7 +296,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.140+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.140+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -246,7 +308,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>9ba59c48-fef0-40f4-ba46-d01f5d93b313</sv:value> + <sv:value>878dd263-4fc9-40ac-8439-52d37d48382a</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -259,7 +321,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.140+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.140+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -271,7 +333,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>6411527a-972c-4ec5-9fcb-79adc0753cc7</sv:value> + <sv:value>e25bca47-5017-4f66-bd22-26adfb8d244a</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -284,7 +346,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.140+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.140+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -296,7 +358,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>4d57f897-79e9-421e-ad62-66565b44f9e4</sv:value> + <sv:value>501ac0fb-9be7-48df-a090-617e8204db4c</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -309,7 +371,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.140+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.140+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -321,7 +383,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>4e077896-f815-41b6-8215-b74f67639449</sv:value> + <sv:value>13bf0f5e-fd2d-494a-85b4-f08dc1b2ca36</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -334,7 +396,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.156+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.140+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -346,7 +408,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>1e4731ea-5c42-41d5-8c35-78202822f69e</sv:value> + <sv:value>e4a1a906-9651-45f1-8a02-f12788851400</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -359,7 +421,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.156+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.156+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -371,7 +433,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>41b8a69b-d2da-4272-a4a6-621551630570</sv:value> + <sv:value>9d21bd5a-0180-4e97-8554-27a3f1fd30ff</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -384,7 +446,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.156+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.156+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -396,7 +458,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>45f2511a-6ced-4f24-bfd7-7cf430969ec4</sv:value> + <sv:value>a78f74b6-6397-47fe-8db3-2314f3533439</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -409,7 +471,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.156+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.156+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -421,7 +483,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>77a69c4f-7127-4803-a4a2-8b5b699f056e</sv:value> + <sv:value>19d02392-67e7-4bd1-9d5f-5230b5da319f</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -434,7 +496,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.156+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.156+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -446,7 +508,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>f86b85b7-699c-400c-9d84-07bc62c8c52f</sv:value> + <sv:value>9858be4b-f1c0-436b-afa4-a53f74b85b4a</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -459,7 +521,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.156+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.156+02:00</sv:value> </sv:property> </sv:node> </sv:node> @@ -471,7 +533,7 @@ <sv:value>mix:lockable</sv:value> </sv:property> <sv:property sv:name="jcr:uuid" sv:type="String"> - <sv:value>431bae86-78cb-419f-9b23-c0dd9b332750</sv:value> + <sv:value>2cad7e00-4526-4d40-ac84-9b3f33f2e23c</sv:value> </sv:property> <sv:property sv:name="jcr:createdBy" sv:type="String"> <sv:value>admin</sv:value> @@ -484,7 +546,7 @@ <sv:value>admin</sv:value> </sv:property> <sv:property sv:name="mgnl:creationdate" sv:type="Date"> - <sv:value>2010-08-25T17:10:51.156+02:00</sv:value> + <sv:value>2010-09-15T18:53:31.156+02:00</sv:value> </sv:property> </sv:node> </sv:node> Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java =================================================================== --- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java 2010-09-14 14:08:49 UTC (rev 3111) +++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java 2010-09-15 16:57:51 UTC (rev 3112) @@ -26,7 +26,11 @@ import java.lang.reflect.Field; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.jcr.RepositoryException; @@ -35,8 +39,8 @@ import org.apache.jackrabbit.core.query.lucene.MatchAllDocsQuery; import org.apache.jackrabbit.core.query.lucene.QueryDecoratorSupport; import org.apache.jackrabbit.core.query.lucene.SearchIndex; +import org.apache.lucene.search.Query; import org.apache.lucene.search.BooleanClause.Occur; -import org.apache.lucene.search.Query; /** @@ -61,7 +65,8 @@ public Query applyAcl(Query query) throws RepositoryException { // creates a lucene query for each acl rule - List<Object[]> aclQueries = new ArrayList<Object[]>(); + List<MyPermission> permissionPatterns = new ArrayList<MyPermission>(); + AccessManager accessManager = MgnlContext.getAccessManager(session.getWorkspace().getName()); List<Permission> permissions = accessManager.getPermissionList(); if (!permissions.isEmpty()) @@ -78,61 +83,143 @@ String[] tokens = StringUtils.splitPreserveAllTokens(pattern, '/'); if (tokens.length > 2 && "".equals(tokens[0]) && "*".equals(tokens[tokens.length - 1])) { - Query q = null; - for (int i = 1; i < tokens.length - 1; i++) - { - if (q == null) - { - q = descendantSelfAxisQuery(jackrabbitTermQuery("_:PARENT"), nameQuery(tokens[i])); - } - else - { - q = childAxisQuery(q, tokens[i]); - } - } - q = descendantSelfAxisQuery(booleanQuery(q), new MatchAllDocsQuery()); - if ((permission.getPermissions() & Permission.READ) == 0) - { - q = notQuery(q); - } - Occur o = Occur.SHOULD; - aclQueries.add(new Object[]{q, o }); + String basePath = StringUtils.removeEnd(pattern, "/*"); + boolean deny = (permission.getPermissions() & Permission.READ) == 0; + permissionPatterns.add(new MyPermission(basePath, deny)); } } } } - catch (SecurityException e) + catch (NoSuchFieldException e) { throw new RepositoryException(e); } - catch (IllegalArgumentException e) + catch (IllegalAccessException e) { throw new RepositoryException(e); } - catch (NoSuchFieldException e) + } + + Collections.sort(permissionPatterns, new Comparator<MyPermission>() + { + + /** + * {@inheritDoc} + */ + public int compare(MyPermission o1, MyPermission o2) { - throw new RepositoryException(e); + return o1.getBasePath().length() - o2.getBasePath().length(); } - catch (IllegalAccessException e) + }); + + Map<String, List<MyPermission>> map = new HashMap<String, List<MyPermission>>(); + for (MyPermission item : permissionPatterns) + { + for (String prefix = item.getBasePath(); prefix.length() > 0; prefix = StringUtils.substringBeforeLast( + prefix, + "/")) { - throw new RepositoryException(e); + if (map.containsKey(prefix)) + { + map.get(prefix).add(item); + continue; + } } + List<MyPermission> list = new ArrayList<MyPermission>(); + list.add(item); + map.put(item.getBasePath(), list); } - // combines the original lucene query with the acl ones - if (!aclQueries.isEmpty()) + Query[] qs = new Query[1 + map.size()]; + int i = 0; + qs[i++] = query; + for (List<MyPermission> list : map.values()) { - Query[] qs = new Query[aclQueries.size()]; - Occur[] os = new Occur[qs.length]; - for (int i = 0; i < qs.length; i++) + MyPermission[] items = list.toArray(new MyPermission[0]); + qs[i++] = denyQuery(items); + } + return booleanQuery(qs); + } + + private Query allowQuery(MyPermission[] items) + { + Query[] qs = new Query[items.length]; + Occur[] os = new Occur[items.length]; + for (int i = 0; i < items.length; i++) + { + qs[i] = query(items[i]); + os[i] = !items[i].isDeny() ? Occur.MUST : Occur.MUST_NOT; + } + return booleanQuery(qs, os); + } + + private Query denyQuery(MyPermission[] items) + { + Query[] qs = new Query[items.length]; + Occur[] os = new Occur[items.length]; + for (int i = 0; i < items.length; i++) + { + qs[i] = !items[i].isDeny() ? query(items[i]) : notQuery(query(items[i])); + os[i] = Occur.SHOULD; + } + return booleanQuery(qs, os); + } + + private Query query(MyPermission item) + { + String[] tokens = StringUtils.splitPreserveAllTokens(item.getBasePath(), '/'); + Query q = null; + for (int j = 1; j < tokens.length; j++) + { + if (q == null) { - Object[] qo = aclQueries.get(i); - qs[i] = (Query) qo[0]; - os[i] = (Occur) qo[1]; + q = descendantSelfAxisQuery(jackrabbitTermQuery("_:PARENT"), nameQuery(tokens[j])); } - query = booleanQuery(query, booleanQuery(qs, os)); + else + { + q = childAxisQuery(q, tokens[j]); + } } + return descendantSelfAxisQuery(booleanQuery(q), new MatchAllDocsQuery()); + } - return query; + /** + * @author dschivo + * @version $Id$ + */ + private static class MyPermission + { + + private final String basePath; + + private final boolean deny; + + /** + * + */ + public MyPermission(String basePath, boolean deny) + { + this.basePath = basePath; + this.deny = deny; + } + + /** + * Returns the basePath. + * @return the basePath + */ + public String getBasePath() + { + return basePath; + } + + /** + * Returns the deny. + * @return the deny + */ + public boolean isDeny() + { + return deny; + } + } } Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java =================================================================== --- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java 2010-09-14 14:08:49 UTC (rev 3111) +++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java 2010-09-15 16:57:51 UTC (rev 3112) @@ -198,9 +198,9 @@ { List<Permission> pList = new ArrayList<Permission>(); Permission p; - // ACL rule: read permission on the whole tree + // ACL rule: read permission on pets subtree p = new PermissionImpl(); - p.setPattern(new SimpleUrlPattern("/*")); + p.setPattern(new SimpleUrlPattern("/pets/*")); p.setPermissions(Permission.READ); pList.add(p); // ACL rule: deny permission on dogs subtree This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |