如何使用“ permissions_required”挂钩有效地将非CMS页面浏览限制在用户组中?

时间:2019-07-12 18:28:45

标签: wagtail

我在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文件已正确拾取,因为我在其中的另一个钩子按预期工作。

我想念什么吗?是否有解决此问题的最新方法?

2 个答案:

答案 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设置中应该有新的权限。