如何自动为JCR节点应用权限?

时间:2013-05-29 18:24:35

标签: jackrabbit cq5 jcr sling crx

对于我工作的CQ5环境,我们有一个发布服务器群。这些服务器上的某些内容受到限制,因此只有属于某些组的用户才能看到该内容。我想编写要保护的文件夹(节点)的权限设置脚本,这样我就不必使用Content Explorer的访问控制编辑器手动重复应用安全性的步骤(This Adobe documentation已经通过访问控制编辑器手动执行此操作的说明。方案是有时会创建新文件夹来保存安全页面,我们希望在将任何内容激活到这些文件夹之前对文件夹应用权限。

由于环境有多个发布者,因此打开Content Explorer并为每个发布者设置权限是重复的,手动的,并且容易出错的工作。我想能够实现自动化,这样我就可以通过脚本推出对所有服务器的权限 - 可能通过curl命令或其他可以自动化的机制(可能是一个包?)。

我发现Sling jackrabbit-accessmanager bundle似乎有助于实现自动化,但似乎它打开了一个安全漏洞。如果我把这个捆绑包放在我的发布者身上,似乎我会提供一个REST接口,让任何人都可以修改权限并授予对应该受到保护的文件夹/节点的访问权限,或者在应该没有的节点上添加安全限制。

如何通过脚本自动创建/修改节点权限 - 并且这样做只允许管理员应用权限更改?

3 个答案:

答案 0 :(得分:3)

此工具允许您以集中方式管理权限,也可以在部署时自动安装: https://github.com/Netcentric/accesscontroltool

关于应用于新文件夹的权限,解决方案是在其父文件夹上正确设置权限。 CQ / AEM将自动对所有孩子应用相同的权限,除非另一个规则破坏继承。

答案 1 :(得分:2)

我找到了一个我以前没有考虑过的替代方案:使用Day CQ ACL设置服务。它在http://dev.day.com/docs/en/cq/5-5/developing/security_model_changes.html提到。

AclSetupService允许用户为单个路径或给定用户/组添加权限。这将应用于CQ的每次重启以保证CQ内的某个许可状态。例如,“允许;继承;每个人; /”阻止每个人访问CQ(即它强制所有用户首先登录)。如AclSetupService的描述中所述,每个条目都需要以下模式:

(“允许”|“拒绝”)“;” (privileges |“inherit”)“;”校长“;”路径

  1. 为第一部分选择“允许”或“拒绝”。
  2. 接下来输入以下权限之一,或将其设置为继承祖先的权限。
  3. 然后输入单个用户/组。
  4. 最后输入一个路径以将权限应用于。
  5. 使用它将在重新启动CQ时替换存储库中的权限集。这些可以使用概述herehere的流程编写脚本。

    特权可以是:
    JCR:读
    代表:写
    JCR:所有
    CRX:复制
    小鬼:的setComplete
    JCR:addChildNodes
    JCR:lifecycleManagement
    JCR:lockManagement
    JCR:modifyAccessControl
    JCR:modifyProperties
    JCR:namespaceManagement
    JCR:nodeTypeDefinitionManagement
    JCR:nodeTypeManagement
    JCR:readAccessControl
    JCR:removeChildNodes
    JCR:
    的removeNode JCR:retentionManagement
    JCR:versionManagement
    JCR:workspaceManagement
    JCR:写
    rep:privilegeManagement

答案 2 :(得分:0)

如果您想在发布实例上使用Sling jackrabbit-accessmanager包,则可以。您可能希望确保位于发布实例前面的调度程序不允许权限请求(/.modifyAce。,。deleteEce。等),并且只能从网络内部直接访问发布实例。标准做法是拒绝调度员中的所有请求并指定允许的内容。

是否有理由您不仅仅在激活文件夹时复制权限?

应该在安全文件夹下面有一个rep:policy节点。