检查当前用户的权限
有一个 API 用于检查当前用户对给定页面的权限。没有检查完整空间的权限这样的事情(可以对各种解释开放,例如“用户可以访问至少一个页面”,或“用户在“权限”视图中有一个“确定”复选框对于空间的根页面”)。
通常会检查该空间的“主页”的访问权限(带有 name 的那个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
aorg.xwiki.security.authorization.AuthorizationManager
并使用hasAccess
该类中的一个方法,该方法接受类型化对象而不是纯字符串。(它想要一个DocumentReference
,而不是一个User
对象,所以给user.getUserReference()
它喂一个。)