首页 > 解决方案 > 为什么 user.has_perm 返回 false 虽然 request.user.get_all_permissions() 和 request.user.get_user_permissions() 返回权限?

问题描述

嘿,我在 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()

...

模型.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 
  ...

视图.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)
    ...

标签: djangouser-permissionsdjango-permissions

解决方案


推荐阅读