0

我有一个在这里或 Jackrabbit 文档中找不到答案的问题,希望你们中的任何人都可以提供帮助。

我正在执行以下操作:

  • 管理员创建“someuser”
  • 管理员创建上述节点: /templates/templateall[ jcr:uuid: a9b629a4-d1dd-4ba3-a602-629e4ca1a7fd jcr:mixinTypes: mix:referenceable, rep:AccessControllable, label: templateall jcr:primaryType: nt:unstructured /templates/templateall /rep:policy[ jcr:primaryType: rep:ACL /templates/templateall/rep:policy/allow[ rep:privileges: jcr:all, rep:principalName: someuser jcr:primaryType: rep:GrantACE

  • someuser 尝试删除 /templates/templateall 节点,但在 save() 上出现以下异常

javax.jcr.AccessDeniedException: /templates/templateall: 不允许在 org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation. java:216) 在 org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216) 在 org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91) 在 org.apache.jackrabbit .core.ItemImpl.save(ItemImpl.java:329) 在 org.apache.jackrabbit.core.session.SessionSaveOperation.perform(SessionSaveOperation.java:64) 在 org.apache.jackrabbit.core.session.SessionState.perform(SessionState .java:216) 在 org.apache.jackrabbit.core.SessionImpl.perform(SessionImpl.java:361) 在 org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:812)

  • 之后,我尝试使用管理员用户删除 /templates/templateall 并成功完成删除。
  • 然后我尝试做同样的事情,但我让用户“someuser”jcr:all 访问节点 /templates 而不是 /templates/templateall,然后“someuser”能够成功删除 /templates/templateall

所以我对第一个结构示例的结论是:“someuser”可以删除节点 /templates/templateall 的任何子节点,但不能删除节点本身,需要提供 jcr:removeChildNodes 访问 no /templates 才能做到这一点。

我的结论正确吗?

谢谢!!

4

1 回答 1

0

我想是的。我不知道关于 Jackrabbit 安全性的所有细节,但是:

在 Jackrabbit 中删除一个节点会修改父节点,因为每个节点都包含子节点 ID 列表。

于 2012-05-03T04:20:48.247 回答