除非删除父项,否则禁止删除Plone中的文件夹(类型)

时间:2011-10-17 15:39:04

标签: plone zope

除了删除父文件夹之外,我想防止在Plone中删除文件夹类型的实例。我有一个预感,事件处理程序可以阻止删除(在绑定到标记接口的IObjectRemovedEvent处理程序中引发异常),但实现此规则的异常似乎更难确定:我想允许删除正在删除其父文件夹时的项目。

我最初的预感是我可以遍历__parent__指针并检查是否在父项(或某个远程间接容器)上设置了一个属性,但是我不知道如何设置它在尝试删除包含的子项之前删除父项的属性(否则不允许删除)。那么现在,我正在质疑我是否正确地接近这个方向?我是否误解了在Plone中删除对象的问题限制?我应该看看plone.app.linkintegrity来源借用技巧吗?

我的用例:“项目”文件夹中的“设置文件夹” - 本质上,除非删除项目文件夹本身,否则绝不允许删除设置文件夹。我想我要求一个非常具体的遏制关系的参照完整性。

除了作为父母被删除的直接结果而被删除的情况外,你如何防止删除对象?

1 个答案:

答案 0 :(得分:1)

经过一段时间后,我终于找到了解决这个普遍问题的方法(但在不同的背景下):

  1. 在父级接口和OFS.interfaces.IObjectWillBeMovedEvent的父级上创建订阅者。
  2. 该处理程序应使用zope.globalrequest.getRequest()来获取请求对象,并使其适应IAnnotations以获取请求上的注释对象(实际上,请求持续时间为全局)。 LI>
  3. IObjectWillBeMovedEvent处理程序将在注释对象上保存物理路径元组(context.getPhysicalPath())的元组形式。
  4. IObjectRemovedEvent尝试阻止删除子项的事件处理程序将在其路径共享父项的基本路径时传递(参见示例)。
  5. 因此,只有在尝试删除对象本身时才会引发异常,但在删除其父对象时却不会引发异常。

    参见示例:http://bazaar.launchpad.net/~upiq-dev/upiq/dev-uu.formlibrary/revision/113

相关问题