Группы аутентификации Django не находят группы и не дают разрешения пользователям, независимо от группы, в которой они находятся

Я делаю простое приложение для недвижимости, в котором пользователи должны быть разделены на две разные группы. Обычный пользователь и брокер. Я использую админку Django для создания групп пользователей. Я также использую сигнал post_save для назначения всех новых пользователей в группу обычных пользователей. На первый взгляд, он работает хорошо, и в админке Django он показывает мне, что пользователь находится в соответствующей группе. Но когда я пытаюсь напечатать self.request.user.groups, значение равно None. Также, когда я пытаюсь проверить, есть ли у пользователей разрешение что-то делать, независимо от разрешений, которые я дал, просмотр, который я проверяю, всегда дает мне 403 Forbidden независимо от того, есть ли у пользователя разрешение или нет. Я использую представления на основе классов и PermissionRequiredMixin соответственно. Вот моя пользовательская модель:

class DjangoEstatesUser(auth_models.AbstractBaseUser, auth_models.PermissionsMixin):
USERNAME_MAX_LENGTH = 30

username = models.CharField(
    max_length=USERNAME_MAX_LENGTH,
    unique=True,
)

date_joined = models.DateTimeField(
    auto_now_add=True,
)

is_staff = models.BooleanField(
    default=False,
)

USERNAME_FIELD = 'username'

objects = DjangoEstatesUserManager()

Также сигнал для назначения новых пользователей в группу:

 @receiver(post_save, sender=DjangoEstatesUser)
def create_user_profile(sender, instance, created, **kwargs):
    if created:
        instance.groups.add(Group.objects.get(name='Users'))

и это одно представление, которое я пытаюсь ограничить для разных пользователей:

class AddEstateView(auth_mixins.LoginRequiredMixin, auth_mixins.PermissionRequiredMixin, views.CreateView):
permission_required = 'auth_permission.add_estate'
template_name = 'main/estates/add_estate.html'
form_class = AddEstateForm

def get_form_kwargs(self):
    kwargs = super().get_form_kwargs()
    kwargs['user'] = self.request.user
    return kwargs

def get_success_url(self):
    return reverse_lazy('profile details', kwargs = {'pk': self.object.user_id})

И это группы с разрешениями. Brokers_group и группа_пользователей.

А это мои db_tables и auth_permission_table.

Я не могу понять, где я ошибаюсь или что я делаю неправильно, любая помощь будет оценена! Заранее спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

self.request.user.groups печатает всегда None: это RelatedManager[Django-doc], а не QuerySet. Менеджеры будут печатать название модели с None, поэтому для Model с именем ModelName в app_name будет напечатано:

app_name.ModelName.None

Вы печатаете элементы с self.request.user.groups.all():

print(self.request.user.groups.all())

@RadoslavHadzhiev: можешь поискать code_name твоего разрешения?

Willem Van Onsem 03.04.2022 11:21

Я загрузил их в вопросе, но они мне подходят. ..

Radoslav Hadzhiev 03.04.2022 11:43

@RadoslavHadzhiev: но приложение вроде называется main, значит, скорее всего main.add_estate.

Willem Van Onsem 03.04.2022 11:46

Другие вопросы по теме