Plone 避免在同一类型的另一个对象中添加folderish对象

Plone 避免在同一类型的另一个对象中添加folderish对象,plone,Plone,我们有一个内容类型(我们称之为MyFolder),它可以包含除MyFolder本身之外在站点中注册的任何其他内容类型 最简单的方法是什么 注册新工作流并设置防护 是否在创建时从具有事件的对象中删除内容类型的添加MyFolder权限 是否从对象中的可添加内容类型列表中筛选内容类型?怎么做 以上都没有?那怎么办 我想第3点应该可以正常工作,在MyFolder上设置“筛选内容类型”标志,并选择所有其他应添加到MyFolder的“允许的内容类型”中的内容 当然,如果添加其他内容类型,则必须手动扩展MyF

我们有一个内容类型(我们称之为MyFolder),它可以包含除MyFolder本身之外在站点中注册的任何其他内容类型

最简单的方法是什么

  • 注册新工作流并设置防护
  • 是否在创建时从具有事件的对象中删除内容类型的添加MyFolder权限
  • 是否从对象中的可添加内容类型列表中筛选内容类型?怎么做
  • 以上都没有?那怎么办

  • 我想第3点应该可以正常工作,在
    MyFolder
    上设置“筛选内容类型”标志,并选择所有其他应添加到
    MyFolder
    的“允许的内容类型”中的内容

    当然,如果添加其他内容类型,则必须手动扩展
    MyFolder
    的“允许的内容类型”

    另一个解决方案是使用eventhandler
    zope.lifecycleevent.interfaces.IObjectCreatedEvent
    MyFolder
    的每个实例上设置localallowedtypes

    在此事件处理程序中,您可以检查父级并设置本地允许的类型。 然后,您必须确保您的“普通”用户无法通过取消选中
    修改约束类型
    权限来修改本地允许的类型

    但在这里,您还必须手动管理新的内容类型

    另一个解决方案: 如果您使用的是灵巧类型,则会有一个
    类型设置适配器
    ()
    
    您可以为特定类型注册自己的适配器

    我想第3点应该可以正常工作,在
    MyFolder
    上设置“筛选内容类型”标志,并选择所有其他应添加到
    MyFolder
    的“允许的内容类型”中的内容

    当然,如果添加其他内容类型,则必须手动扩展
    MyFolder
    的“允许的内容类型”

    另一个解决方案是使用eventhandler
    zope.lifecycleevent.interfaces.IObjectCreatedEvent
    MyFolder
    的每个实例上设置localallowedtypes

    在此事件处理程序中,您可以检查父级并设置本地允许的类型。 然后,您必须确保您的“普通”用户无法通过取消选中
    修改约束类型
    权限来修改本地允许的类型

    但在这里,您还必须手动管理新的内容类型

    另一个解决方案: 如果您使用的是灵巧类型,则会有一个
    类型设置适配器
    ()
    
    您可以为特定类型注册自己的适配器

    我认为第3点有一些复杂性和转折点,因为您需要撤销
    修改contains类型
    权限,但这可能不是预期的行为,因为这样您限制用户修改除MyFolder之外的所有本地允许的类型,最后用户可以找到解决此限制的方法。。。例如,MyFolder->Folder->MyFolder


    第2点更简单,创建新的MyFolder时,您只需使用事件处理程序撤销一个权限,因为您正在撤销权限并禁用对该perm的获取。没有简单的解决办法来避免限制,用户仍然可以为每个可添加的内容类型(MyFolder除外)使用本地允许的类型配置。

    我认为第3点有一些复杂性和缺陷,因为您需要撤销
    修改contains类型的权限,但这可能不是预期的行为,因为这样您就限制了用户修改除MyFolder之外的所有本地允许的类型,最后用户可以找到解决此限制的方法。。。例如,MyFolder->Folder->MyFolder

    第2点更简单,创建新的MyFolder时,您只需使用事件处理程序撤销一个权限,因为您正在撤销权限并禁用对该perm的获取。没有简单的解决方法可以避免这种限制,用户仍然可以对每个可添加的内容类型使用本地允许的类型配置,但MyFolder除外