2014-07-17 5 views
0

많은 'nt : folder'Node이 생성되었고 각 폴더가 생성 될 때 다른 사용자 집합에 사용 권한이 부여되었습니다. 이제 사용자 (읽기 및 쓰기 가능)를 기준으로 노드 목록을 가져와야합니다.사용자를위한 노드 목록 얻기

  • 사용자 생성
UserManager userManager = ((JackrabbitSession) session).getUserManager(); 
    org.apache.jackrabbit.api.security.user.User user = 
    (org.apache.jackrabbit.api.security.user.User)userManager.getAuthorizable(userName); 
  • : 잭 래빗 2.6.0

    사용자 생성 및 privieges의 assignement의

    부분 조각을 사용

    항목

javax.jcr.security.Privilege[] privileges = new 
     javax.jcr.security.Privilege[] { 
     accessControlManager.privilegeFromName(javax.jcr.security.Privilege.JCR_WRITE) 
     }; 
  • 임시 폴더에 액세스
Map<String, Value> restrictions = new HashMap<String, Value>(); 
    restrictions.put("rep:nodePath", 
     valueFactory.createValue(userDbInstance.getUserFilePath(), 
     PropertyType.PATH)); restrictions.put("rep:glob", 
     valueFactory.createValue("*")); 
    accessControlList.addEntry(userPrincipal, privileges, true /*allow or deny */, restrictions); 
  • 노드 0을 추가 추가1,

    public Node addNode(String parent, String name, ETNodeTypes type) throws JCRServiceException { 
        checkSession(); 
        try { 
        name = Text.escapeIllegalJcrChars(name); 
        logger.debug("Adding Node: " + parent + " type: " + type + " name(escaped):" + name); 
        Node node = session.getNode(parent).addNode(name, type.getName()); 
        node.addMixin("rep:AccessControllable"); 
        logger.debug("Node added: " + node.getPath()); 
        return node; 
        } catch (RepositoryException e) { 
         e.printStackTrace(); 
         throw new JCRServiceException(e,e.getMessage(),"Unable to create"); 
        } 
    } 
    

감사합니다.

답변

2

나는 최근에 비슷한 질문 인 Using JCR-SQL2 for querying ACLs in a Jackrabbit repository에 답변했습니다. 오류가 발생, 쿼리를 실행하는

select resource.*, ace.* 
from [nt:hierarchyNode] as resource 
inner join [rep:ACL] as acl 
    ON ISCHILDNODE(acl, resource) 
inner join [rep:ACE] as ace 
    ON ISCHILDNODE(ace, acl) 
where ace.[rep:principalName] = 'username' 
+0

시도 :

내 예를 질의했다. 오류 ---- javax.jcr.RepositoryException는 : 문자열 sqlStatement1이 = "리소스를 선택 * 에이스 *에서 [NT : hierarchyNode]이 쿼리의 결과는 하나 이상의 선택 코드 조각이 포함되어 있습니다.. 자원으로 내부 조인 [ ACL : acl as ISCHILDNODE (acl, resource) "+ "에이스. [rep : principalName] = 'testPrincipal' ";에 내부 연결 [rep : ACE]를 ISCHILDNODE (ace, acl)로 입력하십시오. 쿼리 쿼리 = queryManager.createQuery (sqlStatement1, Query.JCR_SQL2); QueryResult result = query.execute(); NodeIterator nodeIterator1 = result.getNodes(); – techie2k

+0

'NodeIterator nodeIterator1 = result.getNodes();'호출 - 예제 쿼리에는 두 개의 선택자가있어'nt : hierarchyNode'와'rep : ACE' 둘 다에서 값을 얻을 수 있습니다. 오류를 피하려면 쿼리를'resource. * '로 변경하십시오. 결과에 리소스 및 주체 세부 정보가 모두 필요하면 쿼리를있는 그대로 유지하고'result.getRows() '를 사용하십시오. 각 행마다'getNode ('selectorName')'을 통해 노드에서 얻을 수 있습니다. – kevinjansz