获取当前用户在XWiki中可以访问的所有空间
Get all the spaces the current user has access to in XWiki
如何在 java 组件中获取当前用户有权访问的所有空间?
我有以下内容:
List<String> lstSpaces = new ArrayList<String>();
XWikiContext xcontext = this.xwikiContextProvider.get();
XWiki xwiki = xcontext.getWiki();
lstSpaces = xwiki.getSpaces(xcontext);
虽然这成功 returns 所有空间,但它也 returns 当前用户没有 "view" 或其他访问权限的空间。此外, Java .getSpaces 似乎已被弃用,我似乎无法为此找到新方法。 http://maven.xwiki.org/site/docs/xwiki-javadoc-5.0.x/ 似乎过时了,因为 xwiki.getSpaces() 在此 java 文档中仍然有效,别无选择。
正在检查当前用户的权限
有一个 API 用于检查当前用户对给定页面的检查权限。没有检查完整 space 权限的事情(可以有多种解释,例如 "the user has access to at least one page" 或 "the user has an "ok" "rights" 视图中的复选框space").
的根页面
通常检查 space 的 "home page" 的访问权限(名称为 WebHome
的那个),因此 link 到 space 不会指向该用户的 "forbidden" 页面。
也没有查询过滤器之类的,而是必须单独检查每个页面。
访问检查在XWiki
对象的checkAccess(String action, XWikiDocument doc, XWikiContext context)
方法中;检查 space 主页上的查看权限如下所示:
String spaceName = "...."
XWikiDocument spaceHomePage = xwiki.getDocument(spaceName +".WebHome", xcontext)
if (xwiki.checkAccess("view", spaceHomePage, xcontext) ) {
// space home viewable
} else {
// space home not viewable
}
"current user" 存储在 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
并在那个 class,它接受类型对象而不是纯字符串。 (它想要一个 DocumentReference
,而不是 User
对象,因此向它提供一个 user.getUserReference()
。)
如何在 java 组件中获取当前用户有权访问的所有空间?
我有以下内容:
List<String> lstSpaces = new ArrayList<String>();
XWikiContext xcontext = this.xwikiContextProvider.get();
XWiki xwiki = xcontext.getWiki();
lstSpaces = xwiki.getSpaces(xcontext);
虽然这成功 returns 所有空间,但它也 returns 当前用户没有 "view" 或其他访问权限的空间。此外, Java .getSpaces 似乎已被弃用,我似乎无法为此找到新方法。 http://maven.xwiki.org/site/docs/xwiki-javadoc-5.0.x/ 似乎过时了,因为 xwiki.getSpaces() 在此 java 文档中仍然有效,别无选择。
正在检查当前用户的权限
有一个 API 用于检查当前用户对给定页面的检查权限。没有检查完整 space 权限的事情(可以有多种解释,例如 "the user has access to at least one page" 或 "the user has an "ok" "rights" 视图中的复选框space").
的根页面通常检查 space 的 "home page" 的访问权限(名称为 WebHome
的那个),因此 link 到 space 不会指向该用户的 "forbidden" 页面。
也没有查询过滤器之类的,而是必须单独检查每个页面。
访问检查在XWiki
对象的checkAccess(String action, XWikiDocument doc, XWikiContext context)
方法中;检查 space 主页上的查看权限如下所示:
String spaceName = "...."
XWikiDocument spaceHomePage = xwiki.getDocument(spaceName +".WebHome", xcontext)
if (xwiki.checkAccess("view", spaceHomePage, xcontext) ) {
// space home viewable
} else {
// space home not viewable
}
"current user" 存储在 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
并在那个 class,它接受类型对象而不是纯字符串。 (它想要一个 DocumentReference
,而不是 User
对象,因此向它提供一个 user.getUserReference()
。)