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
相关产品推荐
相关产品推荐

