我正在开发一个应用程序,我需要提供当前用户具有委托访问权限的成员列表,日历,待办事项。
在这里,我只能触摸客户的ACL,只有客户可以通过以下方法从他的邮箱添加访问委派用户。
来自邮箱 - >更多...
现在我有Value Picker,我试图从“names.nsf”获取所有用户,然后通过itterating每个用户获得“mail.nsf”文件名。
但是当尝试进一步访问不在ACL中但存在于访问委派内的用户的邮件数据库时。抛出无法访问此用户的邮件Db的错误,
以下是代码:
try{
var allowed_by:java.util.Vector = new java.util.Vector();
var db = session.getCurrentDatabase();
var server_name = db.getServer();
var name_db:NotesDatabase = session.getDatabase(server_name,"names.nsf",false);
var name_v:NotesView = name_db.getView("($VIMPeople)");
var all_view_entries:NotesViewEntryCollection = name_v.getAllEntries();
var loggedInUser = @Name('[CANONICALIZE]',@UserName());
var entry:NotesViewEntry = all_view_entries.getFirstEntry();
while (entry != null)
{
var person_doc:NotesDocument = entry.getDocument();
var mail_db_info = person_doc.getItemValueString("mailFile");
var maildb:NotesDatabase = session.getDatabase(server_name, mail_db_info, false)
if(maildb.isCurrentAccessPublicReader()){
var profile_doc = maildb.getProfileDocument("calendarprofile","");
var ReadCalendarItem:NotesItem = profile_doc.Getfirstitem("ReadCalendar");
allowed_by.add(maildb.getFileName());
}else{
allowed_by.add("No Access");
}
var tmpentry = all_view_entries.getNextEntry();
entry.recycle();
entry = tmpentry;
}
return allowed_by;
}catch(err){
return err+"";
}
在上面的代码我尝试打印只是用于测试的邮件文件名,但这是不可能的,因为当前用户没有在所有用户的邮件数据库上列出,
但在某些用户邮件访问委派列表中,当前用户存在。
示例的实际问题:用户A已登录
用户B在其访问委派中具有用户A,但在B的邮件DB的访问控制列表中没有。因此,当A登录并尝试在他/她具有代理访问权限(不在ACL中)的值选择器列表中获取用户B时,那么在列表中实现此目的的方法是什么?
上面的代码从Lotus脚本转换为SSJS。参考链接enter link description here
知道上述概念如何运作以及现在如何处理这一要求对于知识真的很有帮助。
如果您可以阅读域目录的内容,则可以通过您要查找的名称进行搜索,然后根据ManagerList,DesignerList等检查访问级别。
您在此假设中存在一个generell错误:您认为日历配置文件中的ACL和委派存在于彼此独立。这完全是错的。日历委派只是ACL的用户界面。无论你通过委托给予某人什么权利,都会在数据库的ACL中直接(如果用户有管理员访问他自己的邮件文件)或通过服务器上的管理进程进行遮蔽。
所以:没有必要检查日历配置文件。只要求数据库的“isopen”属性。如果它未打开,则您无权访问数据库。
您可以回答“谁有权访问此邮箱?”的问题。通过读取邮箱ACL中的条目并解析(递归)您找到的组。回答“我可以访问哪些邮箱?”这个问题。只能通过反复试验来完成;例如,通过尝试打开每个邮件数据库