我正在编写一个构建 wiki 中所有页面的 java 组件。分配可以从 java 服务组件中查看页面或空间的用户权限或组的最佳方法是什么?真的很难在 API 中找到这方面的详细信息。
1 回答
您在 API 中没有找到任何详细信息,因为 Rights API 只是关于读取权限信息,而不是设置权限
如果您想以编程方式在页面上设置权限,并且您可以假设默认权限处理程序已就位(UI 和 XWiki 中创建新用户的代码都是这样做的,因此看起来并不太不合理),您可以创建它们作为页面中的对象。
- 通过将“XWiki.XWikiRights”类型的对象添加到页面来设置权限
这些对象具有以下属性:
groups
: 包含逗号分隔的组引用列表的字符串(例如XWiki.XWikiAdminGroup,XWiki.XWikiAllGroup
,对于默认管理员和“所有成员”组)users
: 一个包含逗号分隔的用户引用列表的字符串(例如xwiki:XWiki.Admin,XWiki.Admin
,将描述主 wiki 管理员和本地 wiki 中的“管理员”帐户levels
:一个字符串,包含一个逗号分隔的权限列表,这些权限受此条目影响,例如view,comment,edit
allow
:一个应该有两个值的整数:1
表示该条目是“允许此权限”,0
表示它是“拒绝这些权限”
和字段可以为空,但通常其中一个字段填充有数据groups
。users
和levels
必须allow
设置一些值。
如何在页面上设置权限的一个示例是(内部)方法XWiki.protectUserPage
,该方法以该用户可以编辑一个个人资料页面的方式设置新创建用户的权限:
public void protectUserPage(String userName, String userRights, XWikiDocument doc, XWikiContext context)
throws XWikiException
{
DocumentReference rightClassReference = getRightsClass(context).getDocumentReference();
EntityReference relativeRightClassReference =
rightClassReference.removeParent(rightClassReference.getWikiReference());
// Allow users to edit their own profiles
BaseObject newuserrightsobject = doc.newXObject(relativeRightClassReference, context);
newuserrightsobject.setLargeStringValue("users", userName);
newuserrightsobject.setStringValue("levels", userRights);
newuserrightsobject.setIntValue("allow", 1);
}
这里前几行稍微复杂一些,以确保XWiki.XWikiRights
类页面存在并正确初始化;在没有伤害的情况下,您应该能够做一些更简单的事情,例如:
BaseObject newrightsobject = doc.newObject("XWiki.XWikiRights", context);
userRights
通常在这里edit
(只是在寻找代码时我发现这实际上是可配置的......);userName
是此处用户个人资料页面的全名(例如XWiki.NewUser
)
实际的完整代码可以在 github 上查看,例如 7.2 版本:
最后要区分仅授予特定页面的权限,以及授予页面及其所有子页面的权限:如果您希望权限对象也对子页面有效,请不要将其添加到页面本身,而是创建一个特殊的具有名称的子页面并向该页面WebPreferences
添加类型的对象XWiki.XWikiGlobalRights
(具有相同的字段)。
一些进一步的指示:
有关访问权限如何工作的更多详细信息,请参阅http://platform.xwiki.org/xwiki/bin/view/AdminGuide/Access+Rights 尤其是参考部分:“权限概述”
如果您安装了“管理工具”扩展,您可以查看“ShowRights”页面以查看您 wiki 中的所有正确对象。