我有一个由Maven sling-initial-content原型生成的包,这意味着在安装包时将内容导入到存储库中。我希望匿名用户能够将子节点添加到特定节点,我想在捆绑安装上自动设置这些权限。我尝试了以下内容(在内容目录中存储为JSON文件),但它会生成错误:
“无法加载bundle 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"]
}
}
}
它出了什么问题?老实说,我甚至不知道“节点受保护”是什么意思。
答案 0 :(得分:2)
我认为Sling的内容加载器模块无法处理这些节点,需要对它们进行特殊处理,将它们转换为相应的设置ACL的JCR调用。
Jackrabbit的filevault module使用伪rep:ACL
节点类型来实现这一点,这些节点类型在加载此类内容文件时被解释,即IIUC。如果您确实需要初始内容文件中的ACL,则可以选择使用filevault。
Sling中的替代方法是使用bundle的Activator或该bundle提供的OSGi组件来根据需要设置ACL(只允许一次,如果允许用户更改它们)。我认为在激活Activator或OSGi组件之前将安装初始内容,但您需要验证它。