You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Wagtail中如何基于Session数据实现页面访问权限控制?

在Wagtail中基于Session控制页面访问权限

完全可以实现这个需求,你可以通过重写IframePage模型的serve方法,完成类似Django中UserPassesTestMixin的权限校验逻辑。具体实现如下:

修改后的模型代码

from django.http import HttpResponseForbidden
from wagtail.models import Page
from wagtail.admin.panels import MultiFieldPanel, FieldPanel
from django.db import models

class IframePage(Page):
    iframe_url = models.URLField()

    fabricantes_com_acesso = models.ManyToManyField(
            'Fabricante',  # 确保Fabricante模型已正确导入项目
            blank=True,
            verbose_name="Fabricas com Acesso"
        )

    content_panels = Page.content_panels + [
        MultiFieldPanel([
                FieldPanel('iframe_url'),
                FieldPanel('fabricantes_com_acesso'),
            ], 
            heading="Informações Principais"),
    ]

    def serve(self, request, *args, **kwargs):
        # 从Session中获取用户数据,避免因数据不存在引发报错
        dados_usuario = request.session.get('dados_usuario')
        
        # 校验Session中的bu字段是否符合要求
        # 若dados_usuario是字典格式,将getattr改为dados_usuario.get('bu')即可
        if dados_usuario and getattr(dados_usuario, 'bu', None) == 'Corporate KO':
            # 权限校验通过,调用父类方法正常渲染页面
            return super().serve(request, *args, **kwargs)
        else:
            # 权限校验失败,返回403禁止访问提示
            return HttpResponseForbidden("Você não tem permissão para acessar esta página.")

补充说明

  • 上述代码仅控制前端页面的访问权限,后台编辑页面的权限仍由Wagtail默认权限系统管理;若需限制后台编辑,可额外重写模型的can_edit方法或配置Wagtail页面权限
  • 注意处理Session中dados_usuario不存在的情况,避免出现AttributeError异常

内容的提问来源于stack exchange,提问作者xSkolz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 18:21:34