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

Java 在XWiki中设置文档的用户和组权限,java,rights,xwiki,Java,Rights,Xwiki,我正在编写一个java组件,用于构建wiki中的所有页面。分配可能从java服务组件中查看页面或空间的用户权限或组的最佳方式是什么? 在API中很难找到这方面的详细信息。您在API中找不到任何详细信息,因为权限API只是关于读取权限信息,而不是设置权限 如果您希望以编程方式设置页面的权限,并且可以假设默认权限处理程序已经就绪(在XWiki中创建新用户的UI和代码都会这样做,因此看起来不太合理),那么您可以在页面中将它们创建为对象 权限是通过将类型为“XWiki.XWikiRights”的对象添加

我正在编写一个java组件,用于构建wiki中的所有页面。分配可能从java服务组件中查看页面或空间的用户权限或组的最佳方式是什么?
在API中很难找到这方面的详细信息。

您在API中找不到任何详细信息,因为权限API只是关于读取权限信息,而不是设置权限

如果您希望以编程方式设置页面的权限,并且可以假设默认权限处理程序已经就绪(在XWiki中创建新用户的UI和代码都会这样做,因此看起来不太合理),那么您可以在页面中将它们创建为对象

  • 权限是通过将类型为“XWiki.XWikiRights”的对象添加到页面来设置的
  • 这些对象具有以下属性:

    • groups
      :包含以逗号分隔的组引用列表的字符串(例如默认管理员和“所有成员”组的
      XWiki.XWikiAdminGroup、XWiki.XWikiAllGroup
    • users
      :包含逗号分隔的用户引用列表的字符串(例如
      xwiki:xwiki.Admin,xwiki.Admin
      将描述本地wiki中的主wiki管理员和“Admin”帐户
    • 级别
      :一个字符串,包含受此条目影响的权限列表,以逗号分隔,例如查看、评论、编辑
    • allow
      :一个应该有两个值的整数:
      1
      表示条目是“允许此权限”,
      0
      表示它是“拒绝这些权限”
  • 用户
    字段可以为空,但通常其中一个字段会填充数据。必须使用一些值设置
    级别
    允许

    如何在页面上设置权限的一个示例是(内部)方法
    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
    (具有相同字段)添加到该页

    还有一些建议:

    有关访问权限如何工作的更多详细信息,请参阅参考部分:“权限概述”


    如果已安装“管理工具”扩展,则可以查看“ShowRights”页面以查看wiki中所有正确的对象。

    谢谢您的回答!如何创建一个新组,如
    MyCompany.HRGroup
    MyCompany.AdminGroup
    MCompany.EngineersGroup
    ,具有不同权限,然后根据用户的角色向其添加用户?@Nawaz如果您不想在
    XW中添加这些组iki
    space,您可以为它们中的每一个创建一个空页面,然后在对象编辑器中向其中添加
    XWiki.XWikiGroups
    类型的对象。不要忘记设置“终端页面”复选框创建它时。如果你想通过编程而不是通过用户界面来完成此操作,答案是渴望得到评论;请问一个新问题。@ClemensKlein Robbenhaar:啊,我明白了。我不知道
    XWiki
    是一个空间。我想我可以使用它。我对
    XWiki.HRGroup
    也很满意。是的,我想通过编程来完成。我会的问一个新问题。好了: