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

Wagtail自定义权限配置后用户仍遇403问题求助

问题排查与修复步骤

1. 修正权限标识格式

PermissionRequiredMixin要求的permission_required参数格式是**app_label.permission_codename**,而非模型名。你当前代码里的'Case.can_access_case'不符合规范,需要改为对应应用标签+权限码的格式:

假设Case模型所在的应用名为cases,修改views.py中的权限设置:

class CreateCaseView(PermissionRequiredMixin, CreateView):
    # 修正为 app_label.codename 格式
    permission_required = 'cases.can_access_case'
    # ... 其他代码保持不变

若不确定应用标签,可查看模型的_meta.app_label属性,或检查settings.py中INSTALLED_APPS里的应用名称。

2. 移除冗余的表单实例化

你的get_context_data方法重复创建了CaseForm实例,会覆盖父类生成的带验证状态的表单,建议修改为:

def get_context_data(self, **kwargs):
    context = super().get_context_data(**kwargs)
    # 无需重新实例化form,父类已处理完成
    return context

3. 验证权限分配有效性

  • 进入Wagtail后台用户组管理页,确认case_access组已勾选Can Access case权限
  • 检查目标用户确实属于该组,且未被设置拒绝该权限的规则
  • 可通过Django Shell验证用户权限:
from django.contrib.auth import get_user_model
User = get_user_model()
user = User.objects.get(username="你的测试用户名")
# 检查是否拥有目标权限
user.has_perm('cases.can_access_case')

返回True则权限分配正确,返回False需重新检查组权限配置。

4. 确保用户已登录

PermissionRequiredMixin默认要求用户登录后才能访问,未登录用户访问会直接返回403。你的场景下只需确保测试用户已正常登录即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:06:07