java - 检查用户是否对另一个 lotusCalendar 有编辑权限

标签 java calendar lotus-notes

我实际上是在用 JAVA 编写代码,当特定用户试图更新/删除另一个用户的 Lotus Calendar 的条目时遇到了一些问题。

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

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

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

最佳答案

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

如果访问权限较低,那么事情就会变得有点复杂。

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

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

访问级别 >= ACL.LEVEL_READER 或用户在 Acl 中启用了“读取公共(public)文档”。

这可以使用数据库类的“queryAccessPrivileges”方法进行检查。

要能够编写日历条目,必须启用“编写公共(public)文档”。

这是尊重所有这些方面的代码:

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

关于java - 检查用户是否对另一个 lotusCalendar 有编辑权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17674932/

相关文章:

database - 检查重叠的汽车预订

lotus-notes - 如何以 Notes 形式显示文件系统中的图像?

java - 从ArrayList中选择某些数据

通过引用传递的 java 函数原语

android - 如何在日历中保存选定的项目

java - 如何不断更新日期/日历对象?

lotus-notes - 通过 DIIOP 使用 Java API 进行 Lotus Note 邮件签名

java - 我可以访问 Lotus Notes 嵌入文件而不实际提取它们吗?

java - 无法从 EC2 实例访问 Tomcat (Ubuntu 14)

java - Eclipse 死代码警告 - 为什么我会收到它?