为 XWiki 中的文档设置用户和组权限

Set user and group rights to document in XWiki

我正在编写一个 java 组件来构建 wiki 中的所有页面。分配可以从 java 服务组件中查看页面或空间的用户权限或组的最佳方法是什么? 真的很难在 API.

中找到这方面的详细信息

您在 API 中找不到任何详细信息,因为权限 API 仅涉及阅读权限信息,而不是设置权限

如果你想以编程方式在页面上设置权限,你可以假设默认权限处理程序已经到位(UI 和 XWiki 中创建新用户的代码都这样做了,所以看起来不是太不合理),您可以将它们创建为页面中的对象。

  1. 通过将 "XWiki.XWikiRights" 类型的对象添加到页面来设置权限
  2. 这些对象具有以下属性:

    • groups :包含逗号分隔的组引用列表的字符串(例如,XWiki.XWikiAdminGroup,XWiki.XWikiAllGroup 用于默认管理员和 "all members" 组)
    • users : 包含逗号分隔的用户引用列表的字符串(例如 xwiki:XWiki.Admin,XWiki.Admin 将描述主要 wiki 管理员和本地 wiki 中的 "Admin" 帐户
    • levels :一个字符串,其中包含受此条目影响的逗号分隔的权限列表,例如view,comment,edit
    • allow :一个应该有两个值的整数:1 表示条目是 "allow this right",0 表示它是 "deny these rights"

groupsusers 字段可以为空,但通常其中一个字段填充有数据。 levelsallow 必须设置一些值。

如何在页面上设置权限的一个示例是(内部)方法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 class 页面存在并正确初始化;在没有伤害的情况下,您应该能够做一些更简单的事情,例如:

    BaseObject newrightsobject = doc.newObject("XWiki.XWikiRights", context);

这里的userRights通常是edit(只是在找代码的时候发现这个其实是可以配置的...); userName 是此处用户个人资料页面的全名(例如 XWiki.NewUser

可以在 github 查看实际的完整代码,例如对于 7.2 版本:

https://github.com/xwiki/xwiki-platform/blob/xwiki-platform-7.2/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/XWiki.java#L3366

最后要区分仅授予特定页面的权限与授予页面及其所有子页面的权限:如果您希望权限对象对子页面也有效,请不要将其添加到页面本身, 但创建一个名为 WebPreferences 的特殊子页面,并向该页面添加一个 XWiki.XWikiGlobalRights 类型的对象(具有相同的字段)。

一些进一步的指示:

有关访问权限如何工作的更多详细信息,请参阅 http://platform.xwiki.org/xwiki/bin/view/AdminGuide/Access+Rights 尤其是参考部分:"An overview of permissions"

如果您安装了 "Admin Tools" 扩展,您可以查看 "ShowRights" 页面以查看您 wiki 中的所有正确对象。