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

问题描述:

我在Xpages应用程序的顶部有一个导航栏。这个元素将被许多Xpage应用程序共享 - 它的工作方式类似于Xpage应用程序的内联网。Xpages:确定用户是否可以访问数据库

我不想将数据库链接显示给无权访问数据库的用户。

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

您可以使用Database方法queryAccess(name)获取单个用户的ACL级别。然后,您可以检查“禁止访问”和存款人。下面是如果用户访问分贝返回true一个例子:

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

我会建议你在用户豆用户缓存此。

每的建议是伟大的,但要注意在queryaccess一个限制:

从文档:

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

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

我推荐这样做:制作一个名为的hasAccess。关于范围:

  • 应用范围的用户之间共享 - 无用
  • 会话范围 - 相当不错,但在ACL变化 的情况下,你需要重新启动HTTP或等待会话超时
  • 视图范围建议
  • 请求范围不会太大帮助

实现Map接口,这样你就可以像#{hasAccess[database]}绑定它放在database会是文件路径,还是查找数据库的特殊键。根据用户的访问实现缓存并返回true/false。您如何确定用户的访问权限取决于您,但我认为最好的方法是使用try/catch尝试打开该数据库并使用isOpen()进行检查。