1

私は実際に Java でコーディングしていますが、特定のユーザーが別のユーザーのロータス カレンダーのエントリを更新/削除しようとすると、いくつかの問題が発生します。

userA と userB の 2 人のユーザーがいます。userA には、userB のカレンダーに対する「読み取り」権限しかありません。実際のところ、 userA が userB のカレンダーを更新しようとすると、 userA には読み取り権限しかないため、次のエラーが発生します。

NotesException: Notes error: You are not authorized to perform that operation

私が Java でやりたいことは、userB のカレンダーの更新に進む前に、userA が読み取り権限または編集権限を持っているかどうかを確認することです。

4

1 に答える 1

3

"queryAccess" - Database- クラスのメソッドを使用すると、現在のアクセス レベルを確認できます。このアクセス レベルが > ACL.LEVEL_AUTHOR の場合、ユーザーは確実にカレンダーに書き込むことができます。

アクセスが少ない場合、状況は少し複雑になります。

カレンダー ドキュメントは特別なものです。いわゆる「公文書」です。したがって、アクセスレベルだけが適切なアクセスの指標ではありません。

2 つの可能性があります。ユーザーはカレンダー ドキュメントへの「読み取り」アクセスを取得できます。

アクセス レベル >= ACL.LEVEL_READER またはユーザーは、Acl で「パブリック ドキュメントの読み取り」が有効になっています。

これは、データベース クラスの「queryAccessPrivileges」メソッドを使用して確認できます。

カレンダー エントリを作成できるようにするには、[パブリック ドキュメントの書き込み] を有効にする必要があります。

これらすべての側面を尊重するコードは次のとおりです。

import lotus.domino.*;

public class JavaAgent extends AgentBase {

    public void NotesMain() {

      try {
          Session session = getSession();
          AgentContext agentContext = session.getAgentContext();

          Database db = agentContext.getCurrentDatabase();
          String user = session.getUserName();
          int accLevel = db.queryAccess(user);
          int accPriv = db.queryAccessPrivileges(user);
          boolean blnCanWriteCalendar = false;
          boolean blnCanReadCalendar = false;
          blnCanWriteCalendar = ((accPriv & Database.DBACL_WRITE_PUBLIC_DOCS) > 0)
               | accLevel > ACL.LEVEL_AUTHOR;
          blnCanReadCalendar = ((accPriv & Database.DBACL_READ_PUBLIC_DOCS) > 0)
               | accLevel >= ACL.LEVEL_READER;

      } catch(Exception e) {
          e.printStackTrace();
       }
   }
}
于 2013-07-16T11:22:53.000 に答える