Пользователь Django не наследует права на группу
У меня есть TestCase, на котором я проверяю разрешения. Я не понимаю, как этот тест терпит неудачу там, где он терпит неудачу:
# Make sure group has permission
group_permissions = self.my_group.permissions.filter(codename="view_mymodel")
self.assertEqual(len(group_permissions), 1)
print("Group Permissions:")
for permission in group_permissions:
print(permission)
# Make sure user is in group
user_groups = self.user.groups.filter(name="My User Group")
self.assertEqual(len(user_groups), 1)
user_permissions = self.user.get_all_permissions()
print("User Permissions:")
for permission in user_permissions:
print(permission)
# Make sure user has permission
self.assertTrue(self.user.has_perm("myapp.view_mymodel"))
Это не удается сделать на последнем утверждении. Я вижу, что разрешение установлено для группы, но когда я вызываю get_all_permissions()
, ничего не появляется. Это не имеет смысла, потому что get_all_permissions() должен возвращать все разрешения как для пользователя, так и для группы.
Оказалось, что это была проблема с кэшированием. Если я повторно прохожу аутентификацию пользователя после установки прав доступа, то тест проходит.
# Make sure user is in group
user_groups = self.user.groups.filter(id=self.my_group.id)
self.assertEqual(len(user_groups), 1)
# Refresh cache on the user
self.user = get_object_or_404(User, pk=self.user.id)
user_permissions = self.kcs_user.get_all_permissions()
print("User Permissions:")
for permission in user_permissions:
print(permission)
# Make sure user has permission
self.assertTrue(self.user.has_perm("myapp.view_mymodel"))
# Re-authenticate the client to refresh permissions on the request User
self.client.force_authenticate(user=self.user)
Проблема решена!