检查用户是否在另一个lotusCalendar上进行了编辑

时间:2013-07-16 11:07:49

标签: java calendar lotus-notes

我实际上是在JAVA编码,当某个特定用户试图更新/删除另一个用户的莲花日历时,会遇到一些问题。

有两个用户userA和userB。 userA仅对userB的日历具有“读取”权限。事实上,当userA尝试更新userB的日历时,我有以下错误,因为userA只有读权限:

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

我想在java中做的是检查userA是否具有读取权限或编辑权限,然后再继续更新userB的日历。

1 个答案:

答案 0 :(得分:3)

使用“queryAccess” - 数据库类的方法,您可以找到当前的访问级别。如果此访问级别是> ACL.LEVEL_AUTHOR然后用户可以肯定写入日历。

如果访问量较低,则情况会变得复杂一些。

日历文件很特别。它们被称为“公共文件”。因此,访问级别不是正确访问的唯一指标。

有两种可能性,用户可以获得“阅读” - 访问日历文档:

访问级别> = 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();
       }
   }
}