gpt4 book ai didi

plone - 除非正在删除父级,否则防止删除 Plone 中的文件夹(类型)

转载 作者:行者123 更新时间:2023-12-02 04:05:44 27 4
gpt4 key购买 nike

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

我最初的预感是我可以遍历 __parent__指针并检查是否在被删除的父级(或某个遥远的间接容器)上设置了属性,但我不确定在尝试删除包含的子级之前如何在删除父级时设置此属性(否则不允许删除)。所以现在,我在质疑我是否以正确的方式接近这个?我是否误解了在 Plone 中删除对象的问题约束?我应该寻找 plone.app.linkintegrity 来源来借用技巧吗?

我的用例:“项目”文件夹中的“设置文件夹”——本质上,除非项目文件夹本身被删除,否则永远不允许删除设置文件夹。我想我是在要求一个非常具体的包含关系的参照完整性。

你将如何防止删除一个对象,除非它被删除是因为它的父对象被删除的直接结果?

最佳答案

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

  • 为父接口(interface)和OFS.interfaces.IObjectWillBeMovedEvent在父节点上创建订阅者。
  • 该处理程序应使用 zope.globalrequest.getRequest() 来获取请求对象,并将其适应 IAnnotations 以获取请求上的注释对象(实际上是请求期间的全局对象)。
  • IObjectWillBeMovedEvent 处理程序将在注释对象上保存物理路径元组(context.getPhysicalPath())的元组形式。
  • 如果 IObjectRemovedEvent 的路径共享父项的基本路径,则尝试阻止删除子项的事件处理程序将通过(参见示例)。

  • 因此,只有在尝试删除对象本身时才会引发异常,而不是在删除其父对象时引发异常。

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

    关于plone - 除非正在删除父级,否则防止删除 Plone 中的文件夹(类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796132/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com