【问题标题】:Set user and group rights to document in XWiki为 XWiki 中的文档设置用户和组权限
【发布时间】:2016-03-08 02:25:30
【问题描述】:

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

【问题讨论】:

    标签: java rights xwiki


    【解决方案1】:

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

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

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

      • groups :包含逗号分隔的组引用列表的字符串(例如,XWiki.XWikiAdminGroup,XWiki.XWikiAllGroup 用于默认管理员和“所有成员”组)
      • users :一个包含逗号分隔的用户引用列表的字符串(例如,xwiki:XWiki.Admin,XWiki.Admin 将描述主 wiki 管理员和本地 wiki 中的“Admin”帐户
      • 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 版本:

    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,尤其是参考部分:“权限概述”

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

    【讨论】:

    • 感谢您的精彩回答!
    • 如何创建一个新组,如MyCompany.HRGroup、MyCompany.AdminGroup、MCompany.EngineersGroup,具有不同的权限,然后根据角色向其中添加用户?
    • @Nawaz 如果您不想在XWiki 空间中添加这些组,您可以为每个组创建一个空白页面,然后在对象编辑器中添加XWiki.XWikiGroups 类型的对象给它。创建时不要忘记设置“终端页面”的复选框。如果您想以编程方式而不是通过 UI 执行此操作,答案将是渴望发表评论;请提出一个新问题。
    • @ClemensKlein-Robbenhaar:啊,我明白了。我不知道XWiki 是一个空格。我想我可以使用它。我对XWiki.HRGroup 也很好。是的,我想以编程方式进行。我会问一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2021-02-12
    • 2015-08-01
    • 2014-09-11
    • 2013-12-21
    • 2019-07-25
    • 2011-08-30
    相关资源
    最近更新 更多