java xPage NotesContext getDatabase ACL问题
Domino版本:9.0.1
用例
我有一个主数据库(DB0.nsf),用户有读卡器访问权限,而当前登录的用户有不同访问级别的N个数据库(例如DB1-默认用户是读卡器;DB2-用户无访问权限,DB3-用户组是作者)
用户从主数据库打开xpage。XPage包含一个视图面板,该面板应显示当前登录的用户具有最低读卡器访问权限的数据库列表
此视图的行为很奇怪,即有时它按预期工作,并显示用户具有最低读卡器访问权限的所有数据库,有时它不显示所有数据库。(在我的示例中,用户应该看到DB1和DB3,但有时他只看到一个DB3,他看不到ACL中默认访问设置为Reader的数据库)
xpage
xsp包含一个视图面板,其中源是对象列表,在托管Bean中定义为属性
托管bean会话范围
我的代码片段
String path=paths.get(0).replace("\\","\\\\");
String srv=srvss.get(0);
dbSearch=NotesContext.getCurrent().getCurrentSession().getDatabase(srv,path,false);
问题
在db1上。国家科学基金会。ACL条目默认访问权限设置为reader。
对于同一个用户登录,我对上述代码有不同的结果。
用户只是不断刷新页面,有时会在getDatabase行中抛出异常。
NotesException:用户无法打开数据库TEST\\TEST\\db1。国家科学基金会
在莲花。多米诺骨牌。地方的一场NgetDatabase(本机方法)
在莲花。多米诺骨牌。地方的一场getDatabase(未知源)
额外调试
我为调试添加了几行代码——当抛出异常时,我将获得与会话签名者相同的数据库,并为该数据库中的每个ACL条目打印访问级别。
在我的示例中,我打开了DB1。nsf作为sessionAsSigner,在控制台中,我看到DB1的默认ACL级别。国家科学基金会是读者
如有任何建议,将不胜感激
# 1 楼答案
正如我在上一篇评论中所写,我只能猜测为什么默认有时不起作用。作为一种解决方法,您可以使用全局组(我个人的偏好)或占位符条目,如“*/yourDomain”
在维护数据库的访问权限时,使用组(与ACL角色结合使用)也有许多优点。这就是Notes安全性的设计方式