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
相关产品推荐
相关产品推荐

