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