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



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

我知道Wagtail有一个内置的页面锁定源,但它为每个人锁定页面并阻止所有编辑。

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

我发现https://github.com/wagtail/wagtail/issues/448这似乎解决了我的问题,但它还没有解决。

我很想了解

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

或如果1。太复杂,无法实现

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

为了在编辑前发出警告或完全阻止编辑,我认为最好的选择是before_edit_page挂钩(不过要小心,它在GETPOST请求上都运行),因为目前不可能使用自定义页面权限。

这仍然给我们留下了一个更大的问题,如何检测用户正在编辑页面?没有内置的东西,不幸的是,我不认为有一个简单的解决方案。以下是一些想法:

钩子:使用before_edit_pageafter_edit_page钩子来设置某种标志,我们称之为软锁。然而,这很快就失败了,如果用户在不保存任何更改的情况下关闭页面(after_edit_page永远不会被调用,软锁定标志也永远不会被删除),该怎么办?可以实现超时,但当有人编辑页面时(但只需要很长时间),它仍然可能超时,或者仍然会浪费时间,因为他们需要等待超时发生。

Ping:注入一些JavaScript(通过insert_editor_js钩子),它将用当前用户和页面id Ping自定义端点;timeout选项。

手动创建一些要手动使用的自定义软锁定/软解锁操作(通过register_page_listing_buttonsregister_page_listing_more_buttons挂钩)。

编辑:有一个新的有趣的包,Wagtail Websockets,它可能正好解决了这个问题。

最新更新