获取当前用户在XWiki中可以访问的所有空间

时间:2015-12-08 15:00:33

标签: java xwiki

如何获取当前用户在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中仍处于活动状态,没有其他选择。

1 个答案:

答案 0 :(得分:1)

检查当前用户的权限

有一个API用于检查给定页面的当前用户的权限。没有检查完整空间的权利(可以对各种解释开放,例如&#34;用户可以访问至少一个页面&#34;或者&#34;用户有&#34; 34; ok&#34;&#34;权限&#34;复选框查看空间的根页&#34;)。

通常会检查&#34;主页的访问权限&#34;取而代之的是那个空间(名称为WebHome的那个),因此指向该空间的链接不会导致禁止使用#34;该用户的页面。

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

访问检查位于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
}

&#34;当前用户&#34;存储在xcontext对象中,无需在任何地方明确地传递此用户对象。 (以防有人想知道。)

检查其他用户的权限

(这没有被问到,但是我刚看了这个......)

如果您想知道除当前上下文中的用户之外的其他人的访问权限,则有 xwiki对象的权限服务上的hasAccessLevel(String level, String user, String docname),它希望完全引用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()。)