我正在编写一个 Java 组件,用于构建 wiki 中的所有页面。分配可以从 Java 服务组件中查看页面或空间的用户权限或组的最佳方法是什么?真的很难在 API 中找到有关此的详细信息。
您在API中没有找到详细信息,因为Rights API只是关于读取权限信息,而不是设置权限
如果您想以编程方式在页面上设置权限,并且您可以假设默认权限处理程序已就位(UI 和在 XWiki 中创建新用户的代码都这样做,因此看起来并不太不合理),您可以创建它们作为页面中的对象。
这些对象具有以下属性:
groups: 一个包含逗号分隔的组引用列表的字符串(例如XWiki.XWikiAdminGroup,XWiki.XWikiAllGroup对于默认管理员和“所有成员”组)users: 包含用户引用的逗号分隔列表的字符串(例如,xwiki:XWiki.Admin,XWiki.Admin将描述主维基管理员和本地维基中的“管理员”帐户levels : 一个字符串,包含一个逗号分隔的权限列表,其中包含受此条目影响的权限,例如 view,comment,editallow:一个应该有两个值的整数: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);
}
Run Code Online (Sandbox Code Playgroud)
这里的前几行稍微复杂一些,以确保XWiki.XWikiRights类页面存在并正确初始化;在没有伤害的情况下,您应该能够做一些更简单的事情,例如:
BaseObject newrightsobject = doc.newObject("XWiki.XWikiRights", context);
Run Code Online (Sandbox Code Playgroud)
在userRights通常是edit在这里(这是只有在寻找的代码,我发现这其实是配置...); userName是此处的用户个人资料页面的全名(例如XWiki.NewUser)
实际的完整代码可以在 github 查看,例如 7.2 版本:
最后要区分仅授予特定页面的权限和授予页面及其所有子页面的权限:如果您希望权限对象也对子页面有效,请不要将其添加到页面本身,而是创建一个特殊的带有名称的子页面,WebPreferences并将类型XWiki.XWikiGlobalRights(具有相同字段)的对象添加到该页面。
一些进一步的指示:
有关访问权限如何工作的更多详细信息,请参阅http://platform.xwiki.org/xwiki/bin/view/AdminGuide/Access+Rights, 尤其是参考部分:“权限概述”
如果您已经安装了“管理工具”扩展,您可以查看“ShowRights”页面以查看您 wiki 中的所有正确对象。
| 归档时间: |
|
| 查看次数: |
943 次 |
| 最近记录: |