提取Lotus Notes文档';s从Java获取完整的ACL

提取Lotus Notes文档';s从Java获取完整的ACL,java,document,acl,lotus-domino,lotus,Java,Document,Acl,Lotus Domino,Lotus,我试图找到一种方法来保存特定LotusNotes文档的完整用户列表访问权限 我知道我可以从catalog.nsf获取数据库级ACL,但不能获取文档级访问。另外,我相信文档的Author字段不会列出只读访问用户 有人知道如何获取特定文档的每个用户的完整ACL吗 感谢您的帮助,谢谢 编辑:拼写。你要求的东西有些不繁琐 数据库ACL。您需要确定以下内容 ACL列表中的名称 他们是个人、服务器、组吗 如果他们是一个组,您需要阅读Names.nsf 他们有什么角色吗 接下来,您需要读取数据库中的每个文

我试图找到一种方法来保存特定LotusNotes文档的完整用户列表访问权限

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

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

感谢您的帮助,谢谢


编辑:拼写。

你要求的东西有些不繁琐

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

    • ACL列表中的名称
    • 他们是个人、服务器、组吗
    • 如果他们是一个组,您需要阅读Names.nsf
    • 他们有什么角色吗
  • 接下来,您需要读取数据库中的每个文档。要做到这一点,您需要访问权限。因此,这将至少是读者访问(如果在文档中设置)以及对加密字段的访问(如果设置)

  • 您可以使用NotesNoteCollection类在design+文档中进行迭代

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

    在一个侧面。如果试图根据应用程序诊断特定用户,可以使用以下notes.ini设置

    DEBUG_THREADID=1
    DEBUG_SERVERACL=2
    
    每次发出ACL请求时,都会在Domino控制台上打印出来。它将打印谁在请求、他们请求的级别、他们拥有的级别以及他们获得的访问权限


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

    西蒙是对的。这不是小事。尽管我会跳过他关于阅读表格的建议,但这仍然不是小事。即使根据您的问题只检查一个文档,这也不是小事。我知道审计人员有时想要的正是这种类型的信息,但Domino的安全系统设计时没有考虑到这一点,而且没有内置的API来获取信息


    在Java中,需要使用
    Document.getItems()
    方法来检索所有项的向量。然后你必须仔细检查这些项目。您需要检查
    Item.getType()
    ,以确定它是否是
    项.READERS
    项.AUTHORS
    。如果是,则需要执行
    Item.getValues()
    来检索值的向量,并且必须循环执行向量检查以查看每个值是否都是角色。如果是角色,则必须使用
    Database.getACL()
    并遍历
    acentries
    ,以确定哪些具有角色,以及它们是个人条目还是组条目。如果它们是组条目,则必须在Domino目录中查找组成员,这可能需要扩展嵌套组。对于项目中任何非角色的值,您必须对照Domino目录检查该值,以查看它是否是有效的个人或组,然后再次展开该组,直到最终找到这些人。对于Domino目录中的查找,您必须担心可能会配置目录协助,在这种情况下,可能需要检查多个Domino目录数据库,但是,如果您可以使用Notes/Domino8,这会稍微容易一些,因为有一个
    目录
    类为您处理这个问题。

    我将跳过阅读设计集合,表单上列出的表单字段可能会出现在文档中,也可能不会出现在文档中。它们可能与表格上列出的类型相同,也可能不同。归根结底,只有保存在文档中的内容才有价值。(表单本身上的访问控件可以阻止用户在表单中显示文档;但它们不会阻止编程访问。)此外,文档可以包含未在任何表单上列出的其他读者或作者字段。我提到过这一点,因为可能存在尚未为该表单创建文档的情况,但是没有表单中的列表可能会破坏其他地方的功能(无论OP计划做什么)。我推断这可能是一种安全或合规审计情况,我认为这是人们询问此类信息的常见原因。但我可能错了。你对审计情况的看法是正确的。需要一个报告来列出谁对数据库X中的每个文档具有读取/访问权限。