我实际上是用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,则用户可以确定写入日历。
如果访问权限较低,则情况会变得更加复杂。
日历文件有些特殊。它们被称为“公共文档”。因此,访问级别不是正确访问的唯一指标。
有两种可能性,用户可以“读取”访问日历文档:
访问级别> = 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();
}
}
}