【问题标题】:How to check if a certain user has reader-access to a document如何检查某个用户是否具有对文档的阅读权限
【发布时间】:2019-01-21 12:22:22
【问题描述】:

对于带有 java bean 的 xpage 应用程序,我需要检查某个用户(不是当前用户)是否具有对文档的阅读器访问权限。上述所有访问级别(数据库 ACL、XPage ACL...)都可以被视为理所当然。当前用户始终至少是作者。

每个文档都有一个读者字段“读者”和三个作者字段“创建者”、“作者”、“管理员作者”,最后一个可以忽略,因为它总是只包含每个文档的“[管理员]”

当前的想法是获取此处显示的用户组(Determine all groups for a defined user),遍历它们并与读者和作者字段的字段内容进行比较

为什么我不喜欢它:

  • 使用未记录的 API
  • 糟糕的表现

有没有更好的方法呢?尤其是考虑到嵌套组,因此 $ServerAccess 视图并不是一个真正的选择。

当前代码:

 public boolean isReader(String notesName, String documentID){
    try {
        Vector<String> readers= getAllReaderFieldsValues(documentID);
        if(readers.contains(notesName)){
            return true;
        }
        lotus.notes.addins.DominoServer server = new lotus.notes.addins.DominoServer(DominoUtils.getCurrentSession().getServerName());
        for(String group:(Vector<String>)server.getNamesList(notesName)){
            if (readers.contains(group)){
                return true;
            }
        }
    } catch (NotesException e) {
        //ErrorHandling
    }
    return false;
}

感谢您的帮助

【问题讨论】:

  • 这不是可以“计算”的东西。您授予用户个人资料某些权限,并检查他应该拥有哪些选项
  • 这是我的问题:我如何检查某个用户是否具有文档的阅读权限?
  • 通过编写代码来检查?
  • 我不知道这样做的好方法,因此我问了这个问题。如果你知道的话,请分享给我
  • “特定用户”是指当前用户还是其他用户?最佳解决方案在很大程度上取决于上下文,因此提供有关应用程序、访问角色和文档详细信息的更多详细信息会有所帮助。

标签: java xpages javabeans lotus-notes


【解决方案1】:

有多种方法可以检查用户是否有权访问文档,但所有这些都没有记录(但十年后仍然可用),因此它们不符合您的要求(即在不同的用户上下文中运行或带有“$C1$”列的特殊视图,...)

一种“记录”的方式来做你想要的只是将用户添加到阅读器字段,如果他的名字不在列表中。无需检查用户是否有访问权限。

我仍然想知道您的情况,因为我不明白您要实现什么:您正在检查用户是否在允许他访问文档的特定组中。如果用户属于这些组之一,则跳过他的名字。 同时,该用户已从组中删除,并且不再有权访问该文档...

为什么不使用组或角色?没有编码,只有管理。你在解决组织问题吗?

【讨论】:

  • 场景如下:如果用户被授予对响应文档的阅读权限,他应该能够看到上面的所有父文档。由于读者字段显示给用户以获取信息和编辑,我不想通过创建重复或非必要的条目来使其成为一个集群(例如,用户已经在嵌套组的某个深处 - >不需要添加他)
  • 星期一,用户在其中一个嵌套组中,文档已保存,用户未显式添加。周二,他的名字从群组中删除。周三,他无法再访问该文件了……现在问题来了:你怎么知道他是否仍然需要访问权限? (在我看来,你现在有一个 clusterf**k)
  • 最后但并非最不重要的一点:如果访问权限仍然正确,您必须一遍又一遍地检查文档(如果您使用响应文档中的信息)
  • 优点,可能需要重新考虑我的设计以及此功能的必要性/用途。谢谢
  • 如果我理解正确,父文档需要包含以下回复中的所有读者。您可以做的是从响应文档中构建所有作者和读者的数组,并将其放在父级的 reader 字段中(最好创建一个唯一值数组)。列表是否包含用户名、组或角色无关紧要。但是,您必须定期重新计算(至少每次响应发生变化时)以确保它继续工作。
猜你喜欢
  • 2016-04-23
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2012-07-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多