从Java中提取Lotus Notes Document的完整ACL

时间:2012-10-04 17:44:43

标签: java document acl lotus-domino lotus

我正在尝试找到一种方法来保存特定莲花笔记文档的完整用户列表访问权限。

我知道我可以从catalog.nsf获取数据库级ACL,但不能从文档级访问。此外,文档的作者字段 - 我相信 - 不会列出只读访问用户。

有谁知道如何获取特定文档的每个用户的完整ACL?

感谢任何帮助,谢谢!

编辑:拼写。

2 个答案:

答案 0 :(得分:6)

西蒙是对的。这是非平凡的。虽然我会跳过他关于阅读表格的建议,但它仍然是非平凡的。即使根据您的问题仅检查单个文档,这也是非常重要的。我知道审计人员有时会想要这种类型的信息,但是Domino的安全系统并没有考虑到这一点,并且没有内置的API来获取信息。

在Java中,您需要使用Document.getItems()方法来检索所有项目的向量。然后你必须浏览项目。您需要检查Item.getType()以确定它是Item.READERS还是Item.AUTHORS。如果是,则需要执行Item.getValues()来检索值向量,并且必须遍历向量检查以查看每个值是否为角色。如果它是一个角色,则必须使用Database.getACL()并遍历ACLEntries以确定哪些角色具有该角色以及它们是Person条目还是Group条目。如果它们是组条目,则必须在Domino目录中查找组成员 - 这可能需要扩展嵌套组。对于Item中不是角色的任何值,您可以检查Domino目录中的值以查看它是否是有效的Person或Group - 并再次展开该组,直到最终到达People。对于Domino目录中的查找,您必须担心可以配置目录服务这一事实,在这种情况下可以检查多个Domino目录数据库,但如果您可以使用Notes / Domino 8,这会更容易一些,因为有一个Directory课程,为您解决这个问题。

答案 1 :(得分:3)

你所要求的是有点不重要的。

  1. 数据库ACL。您需要确定以下内容。

    • ACL列表中的名称。
    • 他们是个人,服务员,团体吗?
    • 如果他们是一个群组,您需要阅读Names.nsf
    • 他们有角色吗?
  2. 接下来,您需要阅读数据库中的每个文档。为此,您需要具有访问权限才能执行此操作。这至少是读者访问(如果在文档上设置)以及访问加密字段(如果设置的话)。

  3. 您可以使用 NotesNoteCollection 类来迭代设计+文档。

    http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.main.doc/H_NOTESNOTECOLLECTION_CLASS.html

    检查设计将允许您阅读表单并查看它们是否具有读者字段以及设置了哪些值。之后,如果相关表格的设置不是静态的,您可以检查文档。

    侧面观点。如果您尝试针对应用程序诊断特定用户,则可以使用以下notes.ini设置。

    DEBUG_THREADID=1
    DEBUG_SERVERACL=2
    

    每次发出ACL请求时,都会在Domino控制台上打印出来。它将打印谁在请求,他们请求的级别,他们有什么级别以及他们获得了什么访问权限。

    调试非常冗长,但应该只用于诊断问题和完成时禁用。