已创建超级用户仍出现Django admin 403 Forbidden错误求助
Django Admin 403权限拒绝问题解决(添加用户组时)
问题场景
从GitHub克隆的在线考试系统Django项目,此前运行正常,使用超级用户登录Admin页面后,访问/admin/auth/group/add/时触发403 Forbidden,终端抛出django.core.exceptions.PermissionDenied错误。
排查与解决步骤
1. 检查自定义GroupAdmin权限控制
项目可能对用户组的Admin操作做了自定义限制:
- 找到项目中的
admin.py文件,搜索是否存在对Group模型的自定义Admin类,重点查看has_add_permission方法:
# 示例可能存在的限制代码 from django.contrib.auth.admin import GroupAdmin from django.contrib.auth.models import Group class CustomGroupAdmin(GroupAdmin): def has_add_permission(self, request): # 若此处返回False则会禁止添加操作 return False admin.site.unregister(Group) admin.site.register(Group, CustomGroupAdmin)
- 若存在此类代码,将
return False修改为return True,或者调整权限判断逻辑(比如仅允许超级用户添加):
def has_add_permission(self, request): return request.user.is_superuser
2. 验证超级用户权限完整性
超级用户的权限可能被意外修改:
- 打开Django Shell执行以下命令:
python manage.py shell
from django.contrib.auth.models import User # 替换为你的超级用户名 user = User.objects.get(username="your_superuser_name") print("是否为超级用户:", user.is_superuser) print("是否为 staff:", user.is_staff) print("是否拥有添加组的权限:", user.has_perm("auth.add_group"))
- 若
is_superuser或is_staff为False,重新创建超级用户:
python manage.py createsuperuser
- 若
has_perm返回False,可手动赋予权限,或直接重新创建超级用户。
3. 排查自定义中间件干扰
项目中的自定义中间件可能拦截了Admin请求:
- 打开
settings.py,找到MIDDLEWARE配置项,临时注释掉所有自定义中间件(保留Django默认中间件),重启服务后测试是否恢复正常。 - 若恢复,逐个启用自定义中间件,定位到导致问题的中间件后修改其逻辑。
4. 检查Django版本兼容性
项目依赖的Django版本与当前环境版本不匹配可能引发权限逻辑问题:
- 查看项目根目录的
requirements.txt,确认指定的Django版本,安装对应版本:
pip install django==x.x.x # 替换为项目要求的版本号
- 重启服务后测试。
内容的提问来源于stack exchange,提问作者JayBTProgramming
相关产品推荐
相关产品推荐

