避免在同一类型的另一个对象中添加一个文件夹对象

时间:2013-10-29 12:47:27

标签: plone

我们有一种内容类型(可以称之为 MyFolder ),其中可能包含网站中注册的任何其他内容类型,但 MyFolder 本身除外。

实现这一目标的最简单方法是什么?

  1. 注册新工作流程并设置警卫?
  2. 在创建时使用事件从对象中删除添加MyFolder 内容类型的权限?
  3. 从对象中的可添加内容类型列表中过滤内容类型?如何?
  4. 以上都没有?那怎么样?

2 个答案:

答案 0 :(得分:1)

我猜第3点应该可以正常工作,在MyFolder上设置“过滤内容类型”标记,然后在MyFolder

的“允许的内容类型”中选择所有其他应添加的标记

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

另一种解决方案是使用事件处理程序MyFolderzope.lifecycleevent.interfaces.IObjectCreatedEvent的每个实例上设置localallowedtypes。

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

但在这里你必须手动管理新的内容类型。

又一个解决方案: 如果您使用的是敏捷类型,则有TypeSettingsAdapterhttps://github.com/plone/plone.app.dexterity/blob/master/plone/app/dexterity/browser/types.py) 您可以为您的特定类型注册自己的适配器。

答案 1 :(得分:0)

我认为比第3点有一些复杂性和转变因为你需要撤销Modify contrains types权限但可能这不是预期的行为,因为这样你限制用户修改MyFolder以外的所有本地允许的类型,并且最后,用户可以找到此限制的变通方法...例如,MyFolder - >文件夹 - > MyFolder中

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