Разрешения Django присутствуют, но функция has_perm() возвращает False
Я работаю над разрешениями в приложении Django 4.1. Все эти разрешения задаются группами. Первое разрешение первая проблема:
Кодовое имя разрешения: can_see_all_images имя приложения для разрешения: dating группа, имеющая это разрешение: X-Gold
Как видно на скриншоте, все данные верны:
Первая строка: Пользователь находится в группе Вторая строка: группа имеет разрешение Третья строка: Разрешение имеет хорошее кодовое имя но четвертая строка: у пользователя нет разрешения.
Я перезапустил сервер, отключил пользователя и снова подключил его, ничего не изменилось. Обратите внимание, что если я даю разрешение непосредственно пользователю, оно не работает. Поэтому я полагаю, что проблема не исходит от группы.
Есть идеи?
Вот как создается разрешение в модели:
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.