允许CREATE和PUBLISH但在Wagtail中禁用EDIT和DELETE

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了允许CREATE和PUBLISH但在Wagtail中禁用EDIT和DELETE相关的知识,希望对你有一定的参考价值。

我有一个组要求我允许用户添加和发布页面的内容类型,但禁用任何更改。基本上在发布之后,发布的页面应该是“只读”。有没有办法用witctail中的权限工具来实现这一目标?

我有一个LabPage,我已经注册了权限,以反映在组显示中:

wagtail_hooks.朋友

@hooks.register('register_permissions')
def register_labpage_permissions():
    return Permission.objects.filter(
        content_type__app_label='my_app',
        codename__in=['add_labpage', 'change_labpage', 'delete_labpage']
    )

我只为LabPage设置了“添加”权限。未设置“更改”和“删除”:

LabPage permissions

但我的LabPage包含在网站中,权限被一般网站页面Permissions覆盖:

General site permissions

我的问题是如何允许该特定组的成员拥有该站点的默认权限,但在LabPage的特定情况下能够添加和发布,但不能编辑或删除?

一个更通用的问题是:如何为特定组设置每种内容类型的权限(例如:LabPage),而不会被父组设置覆盖?如何通过扭钩实现这一目标?

答案

我找到了一个解决方案,可以解决我90%的问题。它主要归结为在页面创建后将所有权更改为无。

方案细节:

创建2个组:

管理组enter image description here

成员组enter image description here

基本上,“会员组”中的用户能够创建和发布自己的页面。

为了阻止这个,我在wagtail_hooks.py中创建了一个钩子:

@hooks.register('after_create_page')
def set_read_only_lab_page(request, page):
if page.specific_class == MyPage:
    page.owner = None
    page.save()
    return messages.info(request, "Created read only My Page.")

因此,限制“成员组”的成员在页面创建后失去所有权,但“管理组”的成员仍然可以编辑站点中的所有文档。

此解决方案的唯一缺点是,受限制的成员仍有权取消发布站点中的所有其他页面。

另一种变体是删除受限制成员的“发布”权限,但管理员必须审核提交的页面。

这很难看,但它确实有效。有更好的建议吗?

以上是关于允许CREATE和PUBLISH但在Wagtail中禁用EDIT和DELETE的主要内容,如果未能解决你的问题,请参考以下文章

Wagtail 多站点与 Apache 虚拟主机

必须声明标识符“DBMS_CDC_PUBLISH.CREATE_CHANGE_SET”

Django_分组聚合查询

Wagtail - 在页面上呈现带有相关片段和标签的数据时遇到问题

Mac 上的“dotnet publish”创建一个 .dll,但在 Linux 上生成一个可执行文件?

Wagtail:如何在管理员中设置计算字段(@property)标题