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

Django用户未继承组权限:测试用例断言失败问题

Django组权限测试失败排查方案

常见问题及解决方法

  • 权限缓存未刷新:Django的User对象会缓存权限数据,当修改用户所属组或组的权限后,必须重新从数据库加载用户实例,否则get_all_permissions()会返回旧的缓存数据。在获取用户权限前添加:
    self.user.refresh_from_db()
    
  • 权限标识不匹配:确认权限的完整标识是myapp.view_mymodel,可打印权限的完整信息验证:
    for permission in group_permissions:
        print(f"完整权限标识:{permission.content_type.app_label}.{permission.codename}")
    
  • 关联操作未生效:确保用户加入组、组添加权限的操作已正确执行并保存,必要时手动保存实例:
    self.user.groups.add(self.my_group)
    self.user.save()
    self.my_group.permissions.add(your_permission_instance)
    self.my_group.save()
    

修改后的测试代码示例

# 确认组拥有目标权限
group_permissions = self.my_group.permissions.filter(codename="view_mymodel")
self.assertEqual(len(group_permissions), 1)

print("组权限列表:")
for permission in group_permissions:
    print(f"{permission.content_type.app_label}.{permission.codename}")

# 确认用户在目标组内
user_groups = self.user.groups.filter(name="My User Group")
self.assertEqual(len(user_groups), 1)

# 关键步骤:刷新用户实例,清除权限缓存
self.user.refresh_from_db()

user_permissions = self.user.get_all_permissions()
print("用户权限列表:")
for permission in user_permissions:
    print(permission)

# 断言用户拥有目标权限
self.assertTrue(self.user.has_perm("myapp.view_mymodel"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 00:12:08