【问题标题】:Custom permission return always true, django自定义权限返回始终为真,django
【发布时间】:2017-08-18 13:17:05
【问题描述】:

对不起我的英语。现在我学习 django rest 并尝试为用户创建自定义权限。 Fox 示例权限:“大”和“小”。

我的用户模型

class User(AbstractUser):
    is_active = models.BooleanField(default=False)
    email = models.EmailField(blank=False, unique=True)
    avatar = models.ImageField(upload_to='avatar/users', blank=True)

    class Meta:
        permissions = (
            ("big", "this is big boy"),
            ("small", "this is small"),
        )

然后我向用户添加了类似这样的权限:

permission = Permission.objects.get(name='big')
        user.user_permissions.add(permission)
        user.save()

创建自定义类,it类检查权限:

class IsBigBoy(permissions.BasePermission):

    def has_permission(self, request, view):
        return request.user.has_perm('users.big')

在视图中我创建了测试类来检查我的自定义权限

class MySuperTestRequest(generics.CreateAPIView):
    permission_classes = (permissions.IsAuthenticated, custom_permissions.IsBigBoy)
    serializer_class = CreateSomethingSerializer

    def post(self, 
        return Response({"detail": "good"}, status.HTTP_200_OK)

问题:

return request.user.has_perm('users.big')

它的代码总是返回true

【问题讨论】:

  • 如果登录用户是超级用户,那么has_perm总是返回True。包含User 模型的应用的名称是什么?
  • @Alasdair oooo,感谢您的回答,我尝试从超级用户那里完成。我会检查它。应用调用users

标签: python django


【解决方案1】:

您的逻辑可能需要用户 has_perms(),并且不要忘记用户 is_superuser 他是否拥有所有权限。

【讨论】:

    猜你喜欢
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    相关资源
    最近更新 更多