2016-09-20 2 views
0

사용자가 문서에 잠금을 설정할 수 있는지 확인하고 싶은 기능이 있습니다. 그렇다면 사용자가 문서를 편집 할 수 있음을 알고 있습니다.문서 잠금이 예상 값을 반환하지 않습니다.

public boolean canWriteDocument(String docId, String userName) { 
    boolean canWrite = false; 
    Session session = null; 
    session = getCurrentSession(); 
    try { 
     Database db = session.getDatabase("", this.activeDb); 

     if (db.isDocumentLockingEnabled()) { 
      //Document locking is enabled 

      Document doc = db.getDocumentByUNID(docId); 
      if (doc.lock(userName)) { 
       canWrite = true; 
       System.out.println("document can be locked by user"); 
       doc.unlock(); 
      } else { 
       System.out.println("document can NOT be locked by user"); 
      } 
     } else { 
      //Document locking is NOT enabled 
     } 

    } catch (NotesException e) { 
     // fail silently 
     System.out.println("failure docLock"); 
     //e.printStackTrace(); 
    } 
    return canWrite; 
} 

나는 다음과 같이 함수를 호출 : 때문에 잘못된 ("99DE330A432849AFC125803400313C73", "CN = 홍길동이/O = quintessens")

그러나이 있어야 뭔가 canWriteDocument을 때 ACL 저자와 사용자 (액세스 수준)이 Authors 유형의 필드에 표시되지 않으면 true를 반환합니다.

ACL 액세스 수준을 Reader로 낮추면 반환 값은 여전히 ​​참입니다.

왜 이런 일이 일어날 수 있는지 설명 할 수 있습니까?

+0

그는 "공공 문서를 쓰기"수 (그것은 queryAccess()가 올바른 값을 반환하는 경우, 그것은 절대적으로해야 데이터베이스 잠금 옵션을 의미하지 않을 수 있도록, 다른 후드 액세스 작업을 확인하는 방법은 두 가지가. 가능성이 있습니다) ? –

+0

해당 Privilige를 활성화/비활성화하면 결과가 항상 true입니다. –

답변

0

데이터베이스 액세스 수준이 서버 내에 캐시되어있을 수 있습니다. 개발 환경의 경우 서버를 재부팅하거나 이전에 ACL에 없었던 새로운 사용자로 테스트 해보십시오.

Database.queryAccess()도 올바르지 않으면 캐싱이 문제가 있음을 확인할 수 있습니다.

+0

queryAccess 메소드가 올바른 값을 리턴하는지 확인할 수 있습니다. –

+0

doc.unlock()을 제거하면 $ writers 필드가 사용자 이름으로 문서에 추가되었는지 확인할 수 있습니다. 사용자는 acl 레벨의 독자를 가지지 만 문서를 잠글 수 있습니다. –

+0

@PatrickKwinten이 경우에'canLock AND canEdit'을 평가합니다 ... –

관련 문제