2016-09-20 3 views
0

Ich habe eine Funktion, in der ich überprüfen möchte, ob ein Benutzer eine Sperre für das Dokument festlegen kann. Wenn ja, weiß ich, dass der Benutzer das Dokument bearbeiten kann.Dokumentensperre gibt keinen erwarteten Wert zurück

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; 
} 

nenne ich die Funktion wie folgt: canWriteDocument ("99DE330A432849AFC125803400313C73", "CN = John Doe/O = Quintessen")

Allerdings muss es da etwas nicht in Ordnung sein, wenn der Benutzer (mit ACL Autor Zugriffsebene) ist nicht im Feld vom Typ Autoren aufgeführt, es gibt true zurück.

Wenn ich die ACL-Zugriffsebene auf Reader herabsetze, ist der zurückgegebene Wert immer noch wahr.

Jeder kann erklären, warum das passiert?

+0

Kann er „öffentliche Dokumente schreiben“ ? –

+0

Wenn ich das Privilige aktiviere/deaktiviere, ist das Ergebnis immer wahr. –

Antwort

0

Möglicherweise ist die Datenbankzugriffsebene im Server zwischengespeichert. Versuchen Sie, den Server neu zu starten (wenn es sich um eine Entwicklungsumgebung handelt) oder testen Sie mit einem neuen Benutzer, der noch nie in der ACL war.

Wenn Database.queryAccess() auch nicht korrekt ist, würde das Caching bestätigen das Problem ist.

(Es ist möglich, dass die beiden Arbeitsweisen unterschiedlich unter der Haube Zugang Kontrolle, so dass, wenn queryAccess() den richtigen Wert zurückgibt, ist es nicht kategorisch die Datenbank Sperr Option kann bedeuten sollte.)

+0

Ich kann bestätigen, dass die Methode queryAccess den richtigen Wert zurückgibt. –

+0

Wenn ich doc.unlock() entferne kann ich bestätigen, dass das Feld $ writers dem Dokument mit dem Benutzernamen hinzugefügt wird. Der Benutzer hat einen bestimmten Lesezugriff, kann aber das Dokument sperren. –

+0

@PatrickKwinten in diesem Fall evaluate 'canLock UND canEdit' ... –

Verwandte Themen