Разрешения Django присутствуют, но функция has_perm() возвращает False

Я работаю над разрешениями в приложении Django 4.1. Все эти разрешения задаются группами. Первое разрешение первая проблема:

Кодовое имя разрешения: can_see_all_images имя приложения для разрешения: dating группа, имеющая это разрешение: X-Gold

Как видно на скриншоте, все данные верны: Screenshot

Первая строка: Пользователь находится в группе Вторая строка: группа имеет разрешение Третья строка: Разрешение имеет хорошее кодовое имя но четвертая строка: у пользователя нет разрешения.

Я перезапустил сервер, отключил пользователя и снова подключил его, ничего не изменилось. Обратите внимание, что если я даю разрешение непосредственно пользователю, оно не работает. Поэтому я полагаю, что проблема не исходит от группы.

Есть идеи?

Вот как создается разрешение в модели:

permissions = [('can_see_all_images', _('Can see all images'))]

Заранее спасибо

попробуйте использовать пример, приведенный ниже

    user_id =  request.data.get('user_id') #any existing user id
    user = User.objects.get(id=user_id) # get the user object first
    if user.has_perm('dating.can_see_all_images'):
       pass
    else:
        res = {
                 "message": f"You are not authorized to access API"
            }
        pass

если после этого вы все еще застряли, то, пожалуйста, добавьте свой код.

Я нашел проблему, поэтому размещаю ее здесь на случай, если кто-то встретит то же самое.

Я использую пользовательский бэкенд аутентификации. Этот бэкенд наследуется от BasicBackend. В этом случае необходимо переопределить метод has_perm(), потому что в BaseBackend исходный метод возвращает пустой кортеж.

Если вы не хотите переопределять его, вам нужно наследоваться от ModelBackend, а не от BaseBackend.

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