wagtail - 如何防止 Wagtail CMS 中的同一页面编辑冲突?
问题描述
我们有一个有多个编辑器的 Wagtail 网站,我想知道如何防止 Wagtail CMS 中的同一页面编辑冲突?
我知道 Wagtail 有一个内置的 page lock source,但它会为每个人锁定页面并阻止所有编辑。
锁定或解锁此页面(及其下方的任何页面)进行编辑的能力,防止用户对其进行任何进一步的编辑。
我发现https://github.com/wagtail/wagtail/issues/448似乎正在解决我的问题,但它已关闭未解决。
我有兴趣知道
- 如何使用 Wagtail CMS 防止两个或多个编辑器同时编辑同一页面?
或者如果 1. 太复杂而无法实现
- 如何检测页面编辑冲突并警告 Wagtail UI 中的编辑他们可能正在编辑同一页面?
解决方案
为了在编辑前发出警告或完全阻止编辑,我认为您最好的选择是before_edit_page
钩子(但要小心,它同时在GET
和POST
请求上运行),因为目前无法使用自定义页面权限。
这仍然给我们留下了一个更大的问题,如何检测用户正在编辑页面?没有任何内置的,不幸的是,我认为没有一个简单的解决方案。这里有一些想法:
钩子:使用before_edit_page
和after_edit_page
钩子来设置某种标志,我们称之为软锁。然而这很快就失败了,如果用户关闭页面而不保存任何更改(after_edit_page
永远不会调用并且永远不会删除软锁标志)怎么办?可以实现超时,但是当有人正在编辑页面时它仍然可能超时(但只是需要很长时间),或者仍然会浪费某人的时间,因为他们需要等待超时发生。
Ping:注入一些 JavaScript(通过insert_editor_js
hook),它将使用当前用户和页面 id ping 自定义端点。这可以使用比 hook & timeout 选项更精细的频率。
手动创建一些自定义软锁定/软解锁操作(通过register_page_listing_buttons
和register_page_listing_more_buttons
钩子)以手动使用。
编辑:有一个新的有趣的包,Wagtail-Websockets,它可能只是解决这个问题。
推荐阅读
- microsoft-graph-api - OneDrive Api - 与谁共享项目?
- mysql - 将 csv 导入 mysql 时出现错误(1366,“不正确的字符串值:'\\xE9 des ...' for column 'title' at row 29”)
- linux - 如何从多个文件中提取特定信息并在linux中制作表格?
- java - Datepicker 只用红色标记某些日子
- mysql - 如何在按组和日期排序后删除除一行之外的所有 MySQL 行?
- haskell - 获取/返回函数的类型
- objective-c - 内存泄漏 NSBlockOperation
- recursion - 使用主定理求解 $t(n)=t(\frac{n}{5})+t(\frac{n}{17}) +n$
- python - 基本的并行 python 程序在 Windows 上冻结
- java - HERE 映射 Android:RouteManager 类在哪里?