我正在编写一个构建wiki中所有页面的java组件。分配可以在java服务组件中查看页面或空间的用户权限或组的最佳方法是什么? 真的很难在API中找到相关细节。
答案 0 :(得分:2)
您在API中找不到任何详细信息,因为Rights API仅涉及阅读权限信息,而非设置权利
如果你想以编程方式在页面上设置权限,并且你可以假设默认权限处理程序已经到位(在XWiki中创建新用户的UI和代码都有,那么它似乎不是太不合理了),你可以在页面中将它们创建为对象。
这些对象具有以下属性:
groups
:包含以逗号分隔的群组参考列表的字符串(例如,默认管理员为XWiki.XWikiAdminGroup,XWiki.XWikiAllGroup
,“所有成员”群组)users
:包含以逗号分隔的用户参考列表的字符串(例如xwiki:XWiki.Admin,XWiki.Admin
将描述主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”页面以查看您维基中的所有正确对象。