如何防止Wagtail CMS中的同一页面编辑冲突?

时间:2019-01-28 11:35:16

标签: wagtail

我们有一个包含多个编辑器的Wagtail网站,我想知道如何在Wagtail CMS中防止同一页面编辑冲突?

我知道Wagtail具有内置页面锁定source,但是这会锁定所有人的页面并阻止所有编辑。

  

锁定或解锁此页面(及其下的任何页面)以进行编辑的功能,从而防止用户对其进行任何进一步的编辑。

我发现https://github.com/wagtail/wagtail/issues/448似乎可以解决我的问题,但尚未解决。

我想知道

  1. 如何防止两个或多个编辑者使用Wagtail CMS同时编辑同一页面?

或者如果1.太复杂而无法实现

  1. 如何在Wagtail UI中检测页面编辑冲突并警告编辑器它们可能正在编辑同一页面?

1 个答案:

答案 0 :(得分:0)

为了警告版本之前或完全阻止版本,我认为您最好的选择是before_edit_page挂钩(尽管要小心,它同时在GET和POST请求上运行),因为无法在上使用自定义页面权限时刻。 这仍然给我们提出了一个更大的问题,即如何检测用户正在编辑页面?没有内置的功能,不幸的是,我认为没有简单的解决方案。这里有一些想法: 钩子:使用before_edit_page和after_edit_page钩子设置某种标志,我们称之为软锁定。但是,这种方法很快就无法实现,如果用户在不保存任何更改的情况下关闭页面怎么办(永远不会调用after_edit_page,并且永远不会删除软锁标志)怎么办?可以实施超时,但是在有人编辑页面时(但要花费很长时间)它仍然可能超时,或者由于他们需要等待超时而仍会浪费时间。 Ping:注入一些JavaScript(通过insert_editor_js钩子),以对当前用户和页面ID的自定义端点执行ping操作。这比挂机和超时选项使用的频率要精确得多。 手动创建一些自定义的软锁定/软解锁操作(通过register_page_listing_buttons和register_page_listing_more_buttons挂钩)以手动使用。 编辑:有一个新的有趣的程序包Wagtail-Websockets可能只是解决了这个问题。