Wagtail:如何验证用户是否可以访问模板中的页面
Wagtail: How to verify if a user can access a page in the template
我正在使用 Django 和 Wagtail 创建个人网站,其中属于不同组的用户可以访问某些页面。比如家人组可以看到我的假期照片,同事组可以看到一些内部文件。
通过管理员设置权限访问权限非常简单。但是,我想在 link 到 forbidden 页面旁边显示一个锁。这将使用户非常清楚哪些 links 可以被关注,哪些不能。
有什么方法可以验证当前用户是否有权访问给定页面?
在摆弄了 Wagtail 的代码后,我发现权限是通过一个名为 PageViewRestriction
的模型处理的(code 非常简洁明了),它又继承了 BaseViewRestriction
定义了一个方法 accept_request
。由于引用的页面存储在模型中,唯一缺少的部分是用户请求访问。
有了这个,我设法组合了一个非常简单的模板标签,它检查当前用户是否可以看到给定的页面。过滤器看起来像这样:
@register.simple_tag(takes_context=True)
def can_view(context, page):
pvrs = PageViewRestriction.objects.filter(page=page)
request = context['request']
if pvrs:
for pvr in pvrs:
if pvr.accept_request(request):
return True
return False
return True
我在我的模板中使用的是这样的:
{% can_view menuitem as permission %}
{% if not permission %}
<i class="fas fa-lock"></i>
{% endif %}
请注意,原则上一个页面可以指定多个不同的权限。例如,不同组的成员可以查看它。我假设如果当前用户属于这些组之一,或者如果页面未指定查看权限,则用户可以访问该页面。
我正在使用 Django 和 Wagtail 创建个人网站,其中属于不同组的用户可以访问某些页面。比如家人组可以看到我的假期照片,同事组可以看到一些内部文件。
通过管理员设置权限访问权限非常简单。但是,我想在 link 到 forbidden 页面旁边显示一个锁。这将使用户非常清楚哪些 links 可以被关注,哪些不能。
有什么方法可以验证当前用户是否有权访问给定页面?
在摆弄了 Wagtail 的代码后,我发现权限是通过一个名为 PageViewRestriction
的模型处理的(code 非常简洁明了),它又继承了 BaseViewRestriction
定义了一个方法 accept_request
。由于引用的页面存储在模型中,唯一缺少的部分是用户请求访问。
有了这个,我设法组合了一个非常简单的模板标签,它检查当前用户是否可以看到给定的页面。过滤器看起来像这样:
@register.simple_tag(takes_context=True)
def can_view(context, page):
pvrs = PageViewRestriction.objects.filter(page=page)
request = context['request']
if pvrs:
for pvr in pvrs:
if pvr.accept_request(request):
return True
return False
return True
我在我的模板中使用的是这样的:
{% can_view menuitem as permission %}
{% if not permission %}
<i class="fas fa-lock"></i>
{% endif %}
请注意,原则上一个页面可以指定多个不同的权限。例如,不同组的成员可以查看它。我假设如果当前用户属于这些组之一,或者如果页面未指定查看权限,则用户可以访问该页面。