1

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

完成此任务的最简单方法是什么?

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

2 回答 2

1

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

当然如果你添加其他内容类型,你必须手动扩展MyFolder.

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

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

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

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

于 2013-10-29T13:09:45.753 回答
0

我认为第 3 点有一些复杂性和周转,因为您需要撤销Modify contrains types权限,但也许这不是预期的行为,因为这样您就限制用户修改除 MyFolder 之外的所有本地允许的类型,最后用户可以找到解决方法限制...例如,MyFolder -> 文件夹 -> MyFolder

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

于 2013-10-29T19:27:51.083 回答