2014-01-27 37 views
2

我有一个由Maven sling-initial-content archetype生成的包,这意味着在安装bundle时将内容导入到存储库中。我希望匿名用户能够将子节点添加到特定节点,并且我希望在安装捆绑软件时自动设置这些权限。我尝试了以下操作(存储为内容目录中的JSON文件),但它会生成一个错误:Sling初始内容加载 - 如何设置访问权限?

“无法装入包的初始内容com.example.acltest:无法执行操作,节点受到保护。

{ 
    "jcr:primaryType": "nt:unstructured", 
    "jcr:mixinTypes": ["rep:AccessControllable"], 
    "rep:policy": { 
     "jcr:primaryType": "rep:ACL", 
     "jcr:mixinTypes": ["sling:HierarchyNode"], 
     "allow": { 
      "jcr:primaryType": "rep:GrantACE", 
      "jcr:mixinTypes": ["sling:HierarchyNode"], 
      "rep:principalName": "anonymous", 
      "rep:privileges": ["jcr:addChildNodes"] 
     } 
    } 
} 

它有什么问题?老实说,我甚至不知道“节点受保护”是什么意思。

回答

2

我认为Sling的内容加载器模块无法处理这些节点,因此需要对它们进行特殊处理,将它们转换为设置ACL的相应JCR调用。

兔崽子的filevault module确实实现了这种使用假rep:ACL nodetypes被加载此类内容的文件,IIUC时解释。如果在初始内容文件中确实需要这些ACL,则可以使用filevault作为选项。

Sling中的替代方法是使用该捆绑的Activator或该捆绑提供的OSGi组件来根据需要设置ACL(只有一次,如果允许用户更改它们)。我想认为初始内容将在Activator或OSGi组件激活之前安装,但您需要验证。

+0

我检查了行为,在我的测试中,内容总是在我的OSGi组件被激活之前加载。所以就像你建议我现在在组件激活中设置ACL并且它可以工作。非常感谢您的帮助,伯特兰! – Markus