/* * Copyright (C) 2003-2007 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.services.jcr.impl.core.query; import org.exoplatform.services.jcr.JcrImplBaseTest; import org.exoplatform.services.jcr.access.PermissionType; import org.exoplatform.services.jcr.core.CredentialsImpl; import org.exoplatform.services.jcr.impl.core.NodeImpl; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import java.util.HashMap; import javax.jcr.Credentials; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.query.Query; import javax.jcr.query.QueryManager; import javax.jcr.query.QueryResult; /** * Created by The eXo Platform SAS Author : Sergey Karpenko <sergey.karpenko@exoplatform.com.ua> * * @version $Id: TestPermission.java 11908 2008-03-13 16:00:12Z ksm $ */ public class TestPermission extends JcrImplBaseTest { public static final Log logger = ExoLogger.getLogger("exo.jcr.component.core.TestRemapping"); public final String TEST_NAME = "test_name"; public void setUp() throws Exception { super.setUp(); // create test document NodeImpl node = (NodeImpl)root.addNode(TEST_NAME); node.addMixin("exo:privilegeable"); HashMap<String, String[]> perm = new HashMap<String, String[]>(); perm.put("admin", PermissionType.ALL); node.setPermissions(perm); root.save(); } public void tearDown() throws Exception { Credentials cred = new CredentialsImpl("exo", "exo".toCharArray()); Session sess = repository.login(cred, "ws"); Node node = (Node)sess.getItem("/" + TEST_NAME); node.remove(); sess.save(); sess.logout(); super.tearDown(); } public void testPermissionXPATH() throws Exception { NodeImpl node = (NodeImpl)session.getItem("/" + TEST_NAME); QueryManager qManager = session.getWorkspace().getQueryManager(); QueryResult res = qManager.createQuery(TEST_NAME, Query.XPATH).execute(); assertEquals(1, getActualSize(res)); // Search in other jcr - session Credentials cred = new CredentialsImpl("exo", "exo".toCharArray()); Session sess = repository.login(cred, "ws"); qManager = sess.getWorkspace().getQueryManager(); res = qManager.createQuery(TEST_NAME, Query.XPATH).execute(); assertEquals(0, getActualSize(res)); // add permission for "exo" user HashMap<String, String[]> perm = new HashMap<String, String[]>(); perm.put("exo", PermissionType.ALL); node.setPermissions(perm); root.save(); // search in "admin" session XPATH qManager = session.getWorkspace().getQueryManager(); res = qManager.createQuery(TEST_NAME, Query.XPATH).execute(); assertEquals(0, getActualSize(res)); // search in "exo" session XPATH qManager = sess.getWorkspace().getQueryManager(); res = qManager.createQuery(TEST_NAME, Query.XPATH).execute(); assertEquals(1, getActualSize(res)); } public void testPermissionSQL() throws Exception { NodeImpl node = (NodeImpl)session.getItem("/" + TEST_NAME); QueryManager qManager = session.getWorkspace().getQueryManager(); QueryResult res = qManager.createQuery( "SELECT * FROM " + node.getPrimaryNodeType().getName() + " WHERE jcr:path LIKE '/" + TEST_NAME + "'", Query.SQL).execute(); assertEquals(1, getActualSize(res)); // Search in other jcr - session Credentials cred = new CredentialsImpl("exo", "exo".toCharArray()); Session sess = repository.login(cred, "ws"); qManager = sess.getWorkspace().getQueryManager(); res = qManager.createQuery( "SELECT * FROM " + node.getPrimaryNodeType().getName() + " WHERE jcr:path LIKE '/" + TEST_NAME + "'", Query.SQL).execute(); assertEquals(0, getActualSize(res)); // add permission for "exo" user HashMap<String, String[]> perm = new HashMap<String, String[]>(); perm.put("exo", PermissionType.ALL); node.setPermissions(perm); root.save(); // search in "admin" session SQL qManager = session.getWorkspace().getQueryManager(); res = qManager.createQuery( "SELECT * FROM " + node.getPrimaryNodeType().getName() + " WHERE jcr:path LIKE '/" + TEST_NAME + "'", Query.SQL).execute(); assertEquals(0, getActualSize(res)); // search in "exo" session SQL qManager = sess.getWorkspace().getQueryManager(); res = qManager.createQuery( "SELECT * FROM " + node.getPrimaryNodeType().getName() + " WHERE jcr:path LIKE '/" + TEST_NAME + "'", Query.SQL).execute(); assertEquals(1, getActualSize(res)); } private int getActualSize(QueryResult result) throws RepositoryException { int resultCount = 0; NodeIterator nodes = result.getNodes(); while (nodes.hasNext()) { nodes.nextNode(); resultCount++; } return resultCount; } }