xPage NotesContext getDatabase ACL问题

时间:2014-04-25 11:35:51

标签: java session xpages lotus-domino managed-bean

Domino版本:9.0.1

使用案例
我有一个主数据库(DB0.nsf),用户具有读者访问权限和N个数据库,当前登录的用户具有不同的访问级别(例如DB1 - 默认用户是读者; DB2 - 用户无权访问,DB3 - 用户组是作者)

用户从主数据库打开xpage。 XPage包含一个视图面板,该面板应显示当前登录用户具有最小读者访问权限的数据库列表。

这种观点很奇怪,即。有时它按预期工作,并且显示用户具有最小读者访问权限的所有数据库,有时它不显示所有数据库。(在我的示例中,用户应该看到DB1和DB3,但有时他只看到一个DB3,他做看不到ACL中默认访问权限的数据库设置为Reader)

的XPage
xsp包含一个视图面板,其中源是对象列表,在Managed Bean中定义为属性

托管bean 会话范围

我的代码片段

String path=paths.get(0).replace("\\","\\\\"); String srv=srvss.get(0); dbSearch=NotesContext.getCurrent().getCurrentSession().getDatabase(srv,path,false);

问题
在db1.nsf.ACL条目上,默认访问权限设置为reader。 在同一用户登录的情况下,我对上面的代码有不同的结果。 用户只是不断刷新页面,有时会在getDatabase行中抛出异常。
NotesException:用户用户无法打开数据库TEST \\ test \\ db1.nsf at lotus.domino.local.Session.NgetDatabase(Native Method) 在lotus.domino.local.Session.getDatabase(未知来源)

额外调试
我添加了几行用于调试 - 当抛出异常时,我获得与会话签名者相同的数据库以及该数据库中每个ACL条目的打印访问级别。  在我的示例中,我打开DB1.nsf作为sessionAsSigner,在控制台中我看到DB1.nsf的默认ACL级别是Reader。

任何建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

正如我在上一篇评论中所写,我只能猜到为什么DEFAULT有时不起作用。作为一种解决方法,您可以使用全局组(我的个人偏好)或占位符条目,如“* / yourDomain”

在维护数据库的访问权限时,使用组(与ACL角色结合使用)也有许多优点。这就是Notes安全性的设计方式