Почему user.has_perm возвращает false, хотя request.user.get_all_permissions() и request.user.get_user_permissions() возвращает разрешение?

#django #user-permissions #django-permissions

#django #пользователь-разрешения #django-разрешения

Вопрос:

Привет, у меня небольшая проблема с моим разрешением в Django.

В моей панели администратора все, кажется, в порядке, у пользователя есть все необходимые разрешения, но если я попытаюсь использовать @permission_required декоратор или тест has_perm возвращает «false», вот мой код:

Моя модель пользователя:

 class NewUser(AbstractBaseUser, PermissionsMixin):
    "Data base for the user"
    userNick = models.CharField(verbose_name='Nick', max_length=50, unique=True,)
    userEmail = models.EmailField(verbose_name = 'email adress',max_length=60, unique=True)
    userName = models.CharField(verbose_name='Name', max_length=50)
    userSurname = models.CharField(verbose_name='Surname', max_length=50, blank=True)
    userJoinedDate = models.DateTimeField(verbose_name='Joined date', auto_now=True)

    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_admin = models.BooleanField(default=False)

    USERNAME_FIELD = 'userNick'
    REQUIRED_FIELDS = ['userEmail', 'userName', 'userSurname']

    objects = UserManager()
 

models.py:

     ...
            class Comments(models.Model):
                photos = models.ForeignKey(UserPhotos, on_delete=models.CASCADE)
                comment = models.CharField(max_length=200)
                date = models.DateTimeField(auto_now=True)
            
                class Meta:
                    '''Change plural name'''
                    verbose_name_plural = 'Comments'
            
                def __str__(self):
                    return self.comment 
  ...
 

views.py:

     ...
    def homeView(request):

# Here is my has perm test.
        print(request.user.has_perm('accounts.add_comments')) #Return false.

        
context = {}
        user = request.user
        num_visit = request.session.get('num_visits', 0)
        request.session['num_visits'] = num_visit   1
        if not user.is_authenticated:
            return redirect('instagra:login')
        else:
            context['user'] = NewUser.objects.filter(pk=user.pk)
            context['photos'] = UserPhotos.objects.filter(user=user.pk)
            context['num_visits'] = num_visit
        return render(request, 'main/home_view.html', context)
    ...
 

Комментарии:

1. Является ли эта модель пользователя по умолчанию, активен ли пользователь и как вы проверяете разрешения в admin

2. Это мой собственный пользователь create. Я обновил свой код выше. Пользователь активен, а также имеет разрешение персонала. Я назначаю разрешение из панели администратора (теперь я думаю, что где-то там проблема.)

3. Я проверил свое разрешение пользователя следующим образом: print(request.user.get_all_permissions()) возвращает accounts.add_comment . print(request.user.get_user_permissions()) так же, как и выше. print(request.user.has_perms(‘accounts.add_comment’)) возвращает false . print(request.user.has_perm(‘accounts.add_comment’)) и false . Я немного смущен.