我们有一种内容类型(可以称之为 MyFolder ),其中可能包含网站中注册的任何其他内容类型,但 MyFolder 本身除外。
实现这一目标的最简单方法是什么?
答案 0 :(得分:1)
我猜第3点应该可以正常工作,在MyFolder
上设置“过滤内容类型”标记,然后在MyFolder
当然,如果您添加其他内容类型,则必须手动扩展MyFolder
的“允许的内容类型”。
另一种解决方案是使用事件处理程序MyFolder
在zope.lifecycleevent.interfaces.IObjectCreatedEvent
的每个实例上设置localallowedtypes。
在此事件处理程序中,您可以检查父级并设置本地允许的类型。
然后,您必须通过取消选中Modify constrain types
权限来确保您的“普通”用户无法修改本地允许的类型。
但在这里你必须手动管理新的内容类型。
又一个解决方案:
如果您使用的是敏捷类型,则有TypeSettingsAdapter
(https://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。