首页 > 解决方案 > 如何防止 Wagtail CMS 中的同一页面编辑冲突?

问题描述

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

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

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

我发现https://github.com/wagtail/wagtail/issues/448似乎正在解决我的问题,但它已关闭未解决。

我有兴趣知道

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

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

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

标签: wagtail

解决方案


为了在编辑前发出警告或完全阻止编辑,我认为您最好的选择是before_edit_page钩子(但要小心,它同时在GETPOST请求上运行),因为目前无法使用自定义页面权限

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

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

Ping:注入一些 JavaScript(通过insert_editor_jshook),它将使用当前用户和页面 id ping 自定义端点。这可以使用比 hook & timeout 选项更精细的频率。

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

编辑:有一个新的有趣的包,Wagtail-Websockets,它可能只是解决这个问题。


推荐阅读