Django Rest Framework不允许我拥有多个权限

时间:2014-07-22 09:57:03

标签: python django django-rest-framework

我有Django Rest Framework和权限的问题。例如,DRF不允许我对我的观点拥有多个权限。

如果我以管理员用户身份登录API,我可以使用此mixin访问:

class PermissionMixin(object):
    permission_classes = (permissions.IsAdminUser)

现在,如果我添加第二个权限mixin:

class PermissionMixin(object):
    permission_classes = (permissions.IsAdminUser, TokenHasReadWriteScope)

管理员用户被拒绝访问。应该发生的事情是管理员用户和具有令牌的用户都可以访问,但是现在只有TokenHasReadWriteScope用户可以访问。

有没有其他人有这个问题,这里有什么?

我需要两种类型的用户都可以访问。

这就是我的观点:

class SomeList(PermissionMixin, generics.ListCreateAPIView)

    queryset = Award.objects.all()
    serializer_class = AwardSerializer

PS TokenHasReadWriteScope来自django-oauth-toolkit

2 个答案:

答案 0 :(得分:2)

您遇到的行为绝对正常,这就是DRF的设计方式。如果您想要至少拥有其中一个权限类,则需要指定更复杂的条件。 This是您可能使用的一个很好的例子。安装后,您可以像这样使用它:

from rest_condition import Or
...
permission_classes = (Or(permissions.IsAdminUser, TokenHasReadWriteScope),)

答案 1 :(得分:2)

通过 version 3.9 and above of Django Rest Framework,它们内置了对可组合权限类的支持,您可以开箱即用地使用和/或运算符:

permission_classes = [IsAuthenticated & (ReadOnly | IsAdmin)]