获取所有用户的委托访问用户列表

时间:2019-03-26 17:37:34

标签: delegates xpages lotus-notes lotusscript xpages-ssjs

我正在开发一个应用程序,需要在该应用程序上提供当前用户有权访问mail,Calendar,Todo的成员列表。

在这里,我只能触摸客户的ACL,只有客户可以使用以下方法从他的邮箱中添加访问委派用户。

从邮箱->更多...

  1. 转到“首选项”>“委派”。

  2. 单击添加人或组。

  3. 指定谁应该有权访问。

  4. 选择您希望代表访问的邮件文件数量

  5. 选择您希望委托人能够执行的任务。

现在我有一个价值选择器,我试图从“ names.nsf”中获取所有用户,然后通过激怒每个用户来获取“ 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 邮件数据库的访问控制列表中没有。 因此,当 A 登录并尝试在其具有代理访问权限(不在ACL中)的Value Picker列表中获取用户 B 时,将清单中实现这一目标的方法?

以上代码从Lotus脚本转换为SSJS。 参考链接enter link description here

作为知识,了解以上概念是如何工作的以及现在我将如何继续执行此要求将是非常有用的。

3 个答案:

答案 0 :(得分:1)

如果您可以阅读域目录的内容,则可以通过查找的名称进行搜索,然后根据ManagerList,DesignerList等检查访问级别。

答案 1 :(得分:0)

您在这里的假设中有一个generell错误:您认为“日历”配置文件中的ACL和“委托”彼此独立存在。这是完全错误的。日历委托只是ACL的用户界面。无论您通过授权给某人的任何权利,都将直接(如果用户具有管理员访问自己的邮件文件的权限)或通过服务器上的管理过程被隐藏在数据库的ACL中。

因此:无需检查日历配置文件。只需询问数据库的“ isopen”属性即可。如果未打开,则您无权访问数据库。

答案 2 :(得分:0)

您可以回答“谁可以访问此邮箱?”的问题。通过阅读邮箱ACL中的条目并(递归地)解决找到的组。回答问题“我可以访问哪些邮箱?”只能通过反复试验才能做到;例如,通过尝试打开每个邮件数据库