gpt4 book ai didi

java - 获取XWiki中当前用户有权访问的所有空间

转载 作者:行者123 更新时间:2023-11-30 07:44:10 26 4
gpt4 key购买 nike

如何获取当前用户在java组件中有权访问的所有空间?

我有以下内容:

List<String> lstSpaces = new ArrayList<String>();
XWikiContext xcontext = this.xwikiContextProvider.get();
XWiki xwiki = xcontext.getWiki();
lstSpaces = xwiki.getSpaces(xcontext);

虽然这成功返回了所有空间,但它也返回了当前用户没有“查看”或其他访问权限的空间。另外,Java .getSpaces 似乎已被弃用,我似乎找不到新的方法。 http://maven.xwiki.org/site/docs/xwiki-javadoc-5.0.x/似乎已经过时了,因为 xwiki.getSpaces() 在此 javadoc 中仍然有效,没有其他选择。

最佳答案

检查当前用户的权限

有一个 API 用于检查当前用户对给定页面的权限。不存在检查完整空间的权限这样的事情(这可能有多种解释,例如“用户有权访问至少一个页面”,或者“用户在“权限” View 中具有“确定”复选框)空间的根页面”)。

通常,人们会检查该空间的“主页”的访问权限(名称为 WebHome 的页面),因此指向该空间的链接不会指向该用户的“禁止”页面。

此外,没有查询过滤器等,而是必须单独检查每个页面。

访问检查位于 checkAccess(String action, XWikiDocument doc, XWikiContext context)XWiki的方法目的;检查空间主页上的查看权限将如下所示:

String spaceName = "...."
XWikiDocument spaceHomePage = xwiki.getDocument(spaceName +".WebHome", xcontext)
if (xwiki.checkAccess("view", spaceHomePage, xcontext) ) {
// space home viewable
} else {
// space home not viewable
}

“当前用户”存储在xcontext中对象,无需在任何地方显式传递此用户对象。 (以防万一有人想知道。)

检查其他用户的权限

(这还没有被问到,但我刚刚查了一下......)

如果你想知道当前上下文中除了用户之外的其他人的访问权限,可以使用 hasAccessLevel(String level, String user, String docname)关于 xwiki 对象的权限服务,该对象需要对 user 中的用户个人资料页面的完整引用,因此代码通常如下所示:

XWikiUser user = xwiki.getUser(userLoginHere, xcontext).getUser();
if (xwiki.getRightService().hasAccessLevel("view", user.getUser(), spaceRef +".WebHome", xcontext) ) {
// has view rights ...
}

或者,如果你自己在java组件中,你可以让组件管理器@Inject一个org.xwiki.security.authorization.AuthorizationManager并使用hasAccess该类中的方法,它接受类型化对象而不是普通字符串。 (它需要一个 DocumentReference ,而不是 User 对象,所以向它提供一个 user.getUserReference() 。)

关于java - 获取XWiki中当前用户有权访问的所有空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34159090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com