Xpages:确定用户是否可以访问数据库

Xpages:确定用户是否可以访问数据库,xpages,Xpages,我的Xpages应用程序顶部有一个导航栏。这个元素将在许多Xpage应用程序之间共享——它的工作方式有点像我们的Xpage应用程序的内部网 我不想显示指向无权访问数据库的用户的数据库链接 如何确定用户是否可以访问数据库?这是我应该以某种方式缓存的东西,这样就不必一次又一次地加载它:您可以使用数据库方法queryAccess(name)来获取单个用户的ACL级别。然后,您可以检查无访问权限和存款人。下面是一个示例,如果用户有权访问数据库,则返回true: db.queryAccess(userNa

我的Xpages应用程序顶部有一个导航栏。这个元素将在许多Xpage应用程序之间共享——它的工作方式有点像我们的Xpage应用程序的内部网

我不想显示指向无权访问数据库的用户的数据库链接


如何确定用户是否可以访问数据库?这是我应该以某种方式缓存的东西,这样就不必一次又一次地加载它:

您可以使用
数据库
方法
queryAccess(name)
来获取单个用户的ACL级别。然后,您可以检查无访问权限和存款人。下面是一个示例,如果用户有权访问数据库,则返回true:

db.queryAccess(userName) != ACL.LEVEL_NOACCESS && db.queryAccess(userName) != ACL.LEVEL_DEPOSITOR

我建议您将其缓存到用户bean中。

Per的建议很好,但要注意queryaccess的一个限制:

从文件中:

如果您指定的名称在ACL中明确列出,则queryAccess返回该ACL条目的访问级别,并且不检查组。
如果指定的名称未在ACL中明确列出,则queryAccess将检查该名称是否为运行脚本的计算机所知的主通讯簿中的组成员。在本地工作站上,该地址簿是个人地址簿。在服务器上,该地址簿是Domino®目录。如果queryAccess在一个或多个组中找到该名称,它将返回这些组中的最高访问级别。如果指定的名称未单独或作为组的一部分列在ACL中,则queryAccess将返回ACL的默认访问级别。

首先-如果代码以用户权限运行,则无法为无法打开的数据库调用
queryAccess
。为了解决这个问题,您可以强制代码使用签名者的会话并获得访问权限。但是

我建议:制作一个名为hasAccess的bean。关于范围:

  • 应用程序范围在用户之间共享-无用
  • 会话范围-非常好,但在ACL更改的情况下 您需要重新启动http或等待会话超时
  • 建议查看范围
  • 请求范围不会有多大帮助
实现映射接口,这样您就可以像绑定
{hasAccess[database]}
一样绑定它,其中
database
将是filepath,或者是查找数据库的一些特殊键。根据用户的访问权限实现缓存并返回true/false。如何确定用户的访问权限取决于您,但我认为最好的方法是使用try/catch和trust打开该数据库,并使用isOpen()进行检查