Django应用中用户拥有权限却无法访问页面的问题解决
问题解决步骤
核心原因:权限字符串格式错误
Django中权限的正确格式是 app_label.permission_codename,从你打印的权限对象 <Permission: elec_meter | client | Can add client> 可以看出,你的Client模型所属的app标签是elec_meter,而不是client。你之前用的client.add_client是错误的,导致权限检查不通过。
具体修改方案
修正装饰器中的权限字符串
将原来的装饰器权限参数替换为包含正确app标签的格式:# 正确写法 @permission_required("elec_meter.add_client", login_url="/login") def add_client(request): ... @permission_required("elec_meter.view_client", login_url="/login") def view_client(request): ...注意:你提供的
view_client函数缩进有问题,要保证装饰器和函数定义对齐。验证权限检查
现在调用以下代码应该返回True:user.has_perm("elec_meter.add_client") user.has_perm("elec_meter.view_client")
额外检查项
- 确认用户的权限确实已正确分配(从你打印的
user_permissions来看是没问题的,但可以再核对下数据库中auth_permission表的content_type_id是否对应elec_meter应用下的Client模型) - 确保项目的
MIDDLEWARE配置中包含django.contrib.auth.middleware.AuthenticationMiddleware,这是权限检查的基础中间件
内容的提问来源于stack exchange,提问作者leauradmin
相关产品推荐
相关产品推荐

