我在wagtail站点中有一个应用程序,该应用程序使用views.py中构建的多个页面(此处是因为它们包含对表单和数据的复杂处理,并且不需要任何CMS功能)。这些视图之一,我想限制为特定组的用户。
对于其他页面,我使用@logon required
mixin,效果很好。我可以编写一些使用类似def has_group(user, group_name):
return user.groups.filter(name=group_name).exists()
之类的代码,但是当wagtail具有不错的内置权限模型时,这似乎很混乱。因此,我尝试在wagtail_hook.py中使用以下钩子:
from django.contrib.auth.models import Permission
from wagtail.core import hooks
@hooks.register('register_permissions')
def view_committee_page():
return Permission.objects.filter(codename="view_committee_page")
我认为应该不会在组对象权限下的wagtail admin中显示此内容。 我的理解仅基于使用Wagtail v1.X发现的奇怪示例。该文档在以下特定挂钩上含糊不清:https://docs.wagtail.io/en/v2.5.1/reference/hooks.html#register-permissions
我对我所看到的示例所做的唯一修改(例如,在此处:Wagtail set additional permissions for MyPage)是根据2.0版本说明将wagtail.wagtailcore
更新为wagtail.core
。
我知道我的wagtail_hooks.py文件已正确拾取,因为我在其中的另一个钩子按预期工作。
我想念什么吗?是否有解决此问题的最新方法?
答案 0 :(得分:0)
如何用装饰器创建自己的函数:
@hooks.register('before_serve_page')
在watail_hooks.py中,有一个名为check_view_restrictions()的函数,因此您可以执行类似的操作吗?
答案 1 :(得分:0)
您还需要在Page
模型上设置权限。
from wagtail.core.models import Page
class MyPage(Page):
class Meta:
permissions = (("page_view_only", "Can view my pages"),)
然后使用wagtail_hooks.py
from django.contrib.auth.models import Permission
from wagtail.core import hooks
@hooks.register('register_permissions')
def page_view_only():
return Permission.objects.filter(codename="page_view_only")
管理员Group
设置中应该有新的权限。