Web 用户无权访问数据库,尽管在 ACL 中具有编辑者访问权限
Web user is not authorized to access a database despite having Editor access in the ACL
在我的 XPages 应用程序中,Web 用户可以执行自注册。在注册过程中,将在地址簿中创建 Web 用户的用户文档,并将该用户添加到对数据库具有 编辑权限 的组中。在 Domino 服务器上执行 show nlcache reset
后,用户可以登录并访问该应用程序。
在大约 98% 的注册中,这非常有效。但是,有时新用户登录后无法进入应用程序,因为根据 Domino 服务器,他们 "are not authorized to access" 数据库。登录必须有效,因为用户 ID 是正确的。完全相同的用户 ID 也可以在具有数据库编辑访问权限的组的成员字段中找到。为了额外验证用户的访问级别,我使用用户的 ID 执行了 NotesDatabase.queryAccess()
。它返回 0,这是 ACL 默认值,意思是“无访问权限”。而同一个ACL组中有几十个用户访问数据库完全没有问题。
目前,我们 "circumvent" 通过从地址簿中手动删除用户的文档以及从 ACL 组的成员中删除 him/her 这个问题。之后,我们要求用户使用与之前完全相同的信息重新进行自助注册。到目前为止,第二次注册一直有效,用户可以访问该应用程序。然而,这不是一个真正的解决方案,这就是为什么我不得不问是否有人知道可能是什么问题?
不要直接在地址簿中创建条目。使用 adminp 进程进行注册。为了最大限度地减少感知延迟,请发送一条 validation/confirmation 消息,用户必须单击该消息。
这可能与 names.nsf
中浏览量索引的刷新频率有关
由于访问控制是在ACL中进行分组的,所以只有views索引更新后,服务器才会"know"哪个用户属于哪个组。
在正常设置下,这可能需要几分钟时间。
您可以通过从您的 Notes 客户端使用 CTRL-MAJ-F9 强制刷新索引来检验这个假设(警告,可能需要很长时间,具体取决于 names.nsf 中的网络和条目数)或者使用命令
load updall -v names.nsf
...或者让用户稍等片刻并在 5 分钟后重试。
好的,先问一个问题。如果您让用户等待几分钟,那么访问会起作用吗? IE。这是 refresh/caching 问题 - 还是您将用户添加到群组的方式不一致?
我假设用户名的格式是正确的,因为它在大多数情况下都有效(即完全分层的名称)...有什么 "special" 关于名称不起作用的地方吗?
我做了类似的事情(并且已经做了好几次)- 尽管有一些不同:-)
我通常使用目录服务将我的数据库包含在“($Users)”视图中。当我更新此视图中的任何内容时,我会在视图上执行 view.refresh()(使用 Java)。我通常不在这些类型的应用程序中使用组(要么不适用 - 或者我为特定用户使用 OU 或角色)。我不确定组成员身份是如何计算的 - 但我想你可以尝试找到相关视图(尽管我看时 none 看起来很明显) - 并对其进行刷新。
/约翰
12/02/2015 的评论似乎是正确答案:
检查自注册用户的名字中是否有两个连续的space,(可能是因为拖尾也有space)
在多米诺骨牌组中做一个FullTrim。所以我们有
John<space><space>Smith
它不在组 XXX 中,因为在成员中它是:
John<space>Smith.
在我的 XPages 应用程序中,Web 用户可以执行自注册。在注册过程中,将在地址簿中创建 Web 用户的用户文档,并将该用户添加到对数据库具有 编辑权限 的组中。在 Domino 服务器上执行 show nlcache reset
后,用户可以登录并访问该应用程序。
在大约 98% 的注册中,这非常有效。但是,有时新用户登录后无法进入应用程序,因为根据 Domino 服务器,他们 "are not authorized to access" 数据库。登录必须有效,因为用户 ID 是正确的。完全相同的用户 ID 也可以在具有数据库编辑访问权限的组的成员字段中找到。为了额外验证用户的访问级别,我使用用户的 ID 执行了 NotesDatabase.queryAccess()
。它返回 0,这是 ACL 默认值,意思是“无访问权限”。而同一个ACL组中有几十个用户访问数据库完全没有问题。
目前,我们 "circumvent" 通过从地址簿中手动删除用户的文档以及从 ACL 组的成员中删除 him/her 这个问题。之后,我们要求用户使用与之前完全相同的信息重新进行自助注册。到目前为止,第二次注册一直有效,用户可以访问该应用程序。然而,这不是一个真正的解决方案,这就是为什么我不得不问是否有人知道可能是什么问题?
不要直接在地址簿中创建条目。使用 adminp 进程进行注册。为了最大限度地减少感知延迟,请发送一条 validation/confirmation 消息,用户必须单击该消息。
这可能与 names.nsf
中浏览量索引的刷新频率有关由于访问控制是在ACL中进行分组的,所以只有views索引更新后,服务器才会"know"哪个用户属于哪个组。 在正常设置下,这可能需要几分钟时间。
您可以通过从您的 Notes 客户端使用 CTRL-MAJ-F9 强制刷新索引来检验这个假设(警告,可能需要很长时间,具体取决于 names.nsf 中的网络和条目数)或者使用命令
load updall -v names.nsf
...或者让用户稍等片刻并在 5 分钟后重试。
好的,先问一个问题。如果您让用户等待几分钟,那么访问会起作用吗? IE。这是 refresh/caching 问题 - 还是您将用户添加到群组的方式不一致?
我假设用户名的格式是正确的,因为它在大多数情况下都有效(即完全分层的名称)...有什么 "special" 关于名称不起作用的地方吗?
我做了类似的事情(并且已经做了好几次)- 尽管有一些不同:-)
我通常使用目录服务将我的数据库包含在“($Users)”视图中。当我更新此视图中的任何内容时,我会在视图上执行 view.refresh()(使用 Java)。我通常不在这些类型的应用程序中使用组(要么不适用 - 或者我为特定用户使用 OU 或角色)。我不确定组成员身份是如何计算的 - 但我想你可以尝试找到相关视图(尽管我看时 none 看起来很明显) - 并对其进行刷新。
/约翰
12/02/2015 的评论似乎是正确答案:
检查自注册用户的名字中是否有两个连续的space,(可能是因为拖尾也有space)
在多米诺骨牌组中做一个FullTrim。所以我们有
John<space><space>Smith
它不在组 XXX 中,因为在成员中它是:
John<space>Smith.