Пользователь 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)

Проблема решена!

Вернуться на верх