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

为何实例化用户对象并添加权限后,user.has_perm()仍始终返回False?

解决方案
  • 重新拉取用户实例
    Django ORM会缓存已加载的对象,你添加权限后,当前内存中的user1并没有同步数据库的变更。执行以下代码重新获取用户:

    user1 = User.objects.get(id=user1.id)
    print(user1.has_perm(perm_codename))  # 搭配正确的权限字符串使用
    
  • 使用正确的权限参数格式
    has_perm()方法需要传入权限的字符串标识(格式为app_label.codename),而不是权限对象的可读字符串。你可以从权限对象中拼接出正确的参数:

    perm = exam_permissions[3]
    perm_str = f"{perm.content_type.app_label}.{perm.codename}"
    # 添加权限后重新获取用户再验证
    user1.user_permissions.add(perm)
    user1 = User.objects.get(id=user1.id)
    print(user1.has_perm(perm_str))
    
  • 验证权限是否成功添加
    直接查看用户关联的权限列表,确认操作是否生效:

    print(user1.user_permissions.all())
    

    如果列表里没有目标权限,检查是否存在事务未提交(shell环境默认自动提交,除非手动开启了事务)。

  • 排查自定义权限后端
    如果项目中配置了自定义的权限后端,可能会覆盖默认的权限验证逻辑。检查settings.py中的AUTHENTICATION_BACKENDS配置,确认是否有自定义后端影响了权限判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:15:33