Plone 如何添加一个条件以使敏捷类型可添加?

Plone 如何添加一个条件以使敏捷类型可添加?,plone,dexterity,Plone,Dexterity,灵巧FTI可以选择一个权限作为类型的“AddPermission”,但我正在寻找一种方法,在允许将类型添加到容器之前,需要一些潜在的复杂逻辑来解析true。在我的特定示例中,我不允许在任何给定容器中只允许X个此类内容。如果我可以对一个方法进行子类化,比如说“isAddable”或者其他一些非常好的方法,但是我没有看到任何一个方法能够做到这一点。也许这是不可能的,因为类对象还没有启动,所以它不能调用任何方法,但也许FTI本身有什么 我想到了另外两个选择。在我的例子中,由于容器也是一个自定义内容类型

灵巧FTI可以选择一个权限作为类型的“AddPermission”,但我正在寻找一种方法,在允许将类型添加到容器之前,需要一些潜在的复杂逻辑来解析true。在我的特定示例中,我不允许在任何给定容器中只允许X个此类内容。如果我可以对一个方法进行子类化,比如说“isAddable”或者其他一些非常好的方法,但是我没有看到任何一个方法能够做到这一点。也许这是不可能的,因为类对象还没有启动,所以它不能调用任何方法,但也许FTI本身有什么

我想到了另外两个选择。在我的例子中,由于容器也是一个自定义内容类型,我可以重写它的allowedContentTypes方法。不过,我不想依靠集装箱来做这项检查。另一个选项是覆盖plone.app.content.browser.folderfactories.FolderFactoriesView中的addable_types方法。有更好的方法吗


这是在Plone 4.3中,不幸的是在fti中没有“可添加的表达式”这样的东西

我认为覆盖FolderFactoriesView不会起作用-智能用户仍然可以调用
${folder\u url}/++add++your.type

对我来说,为您的folderish类型定制allowedContentTypes实现听起来是一个很好的解决方案


另一个选项是添加一个事件处理程序(不知道哪一个事件适合——也许zope.lifecycleevent.IObjectCreatedEvent就可以了),如果您的条件不满足,它会引发一个错误。(用户仍然会看到“add/yourtype”菜单,但会出现错误-因此这应该与自定义FolderFactoriesView结合起来)

关于安全性的解释是正确的,但是如果您仍然希望对可添加类型只有一个可视的UI限制(用户不会看到可添加类型,但他们仍然可以手动编写ad add URL),您可以使用(由于测试问题尚未发布,但应适用于Plone 4.3和5)我最终修复了文件夹Factorys视图,并为zope.LifecycleeEvent.interfaces.IObjectAddedEvent创建了一个事件侦听器。不幸的是,在父容器上修改allowedContentTypes与仅更改Factorys视图具有相同的安全漏洞。感谢您的详细反馈。很高兴听到您的问题已经解决;-)