我有一个组要求我允许用户添加和发布页面的内容类型,但禁用任何更改。基本上在发布之后,发布的页面应该是“只读”。 有没有办法用wagtail中的权限工具来实现这一目标?
我有一个LabPage
,我已经注册了要在组显示中反映的权限:
wagtail_hooks.py
@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
包含在网站中,权限被一般网站页面权限覆盖:
我的问题是如何允许此特定组的成员拥有该站点的默认权限,但在LabPage
的特定情况下能够添加和发布,但不能编辑或删除?
更通用的问题是:如何为特定群组设置每种内容类型的权限(例如:LabPage
),而不会被父群组设置覆盖? 如何通过扭钩实现这一目标?
答案 0 :(得分:0)
我找到了一个解决方案,可以解决我90%的问题。它主要归结为在页面创建后将所有权更改为无。
解决方案详情:
创建2个组:
基本上,“会员组”中的用户可以创建和发布自己的页面。
为了阻止这种情况,我在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.")
因此,限制“会员组”的成员在页面创建后失去了所有权,但“管理组”的成员仍然可以编辑网站中的所有文档。
此解决方案的唯一缺点是,受限制的成员仍有权取消发布站点中的所有其他页面。
另一种变体是删除受限制成员的“发布”权限,但管理员必须审核提交的页面。
这很难看,但它确实有效。还有更好的建议吗?