Python Django Rest框架赢得';Don’不要让我有一个以上的权限

Python Django Rest框架赢得';Don’不要让我有一个以上的权限,python,django,django-rest-framework,Python,Django,Django Rest Framework,我对Django Rest框架和权限有问题。例如,DRF不会让我对我的视图拥有多个权限 如果我以管理员用户身份登录API,我可以使用此mixin获得访问权限: class PermissionMixin(object): permission_classes = (permissions.IsAdminUser) 现在,如果我添加第二个权限mixin: class PermissionMixin(object): permission_classes = (permission

我对Django Rest框架和权限有问题。例如,DRF不会让我对我的视图拥有多个权限

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

class PermissionMixin(object):
    permission_classes = (permissions.IsAdminUser)
现在,如果我添加第二个权限mixin:

class PermissionMixin(object):
    permission_classes = (permissions.IsAdminUser, TokenHasReadWriteScope)
管理员用户被拒绝访问。应该发生的是管理员用户和具有令牌的用户都可以获得访问权限,但是现在只有令牌HasReadWriteScope用户可以访问

还有其他人有这个问题吗?这里发生了什么

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

我的观点是这样的:

class SomeList(PermissionMixin, generics.ListCreateAPIView)

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

PS TokenHasReadWriteScope来自

您所经历的行为是绝对正常的,这就是DRF的设计方式。如果希望至少拥有其中一个权限类,则需要指定一个更“复杂”的条件。这是一个很好的例子,说明你可能会使用什么。安装后,您可以这样使用它:

from rest_condition import Or
...
permission_classes = (Or(permissions.IsAdminUser, TokenHasReadWriteScope),)
通过,它们内置了对可组合权限类的支持,您可以使用和/或开箱即用的运算符:

permission_classes = [IsAuthenticated & (ReadOnly | IsAdmin)]

我想您是“从oauth2_provider.ext.rest_框架导入TokenHasReadWriteScope”?!控制台中的错误是什么样子的?@wagner felix嗨,谢谢你的回复。是的,我正确地导入了。根本没有错误,我不知道是这样的。非常感谢。该文件记录在哪里?静止状态不存在。这是从哪里导入的?不幸的是,我不知道它是从哪里记录的。根据个人经验,我知道DRF以一定的顺序应用所有权限类。我给你的链接是我在遇到和你一样的问题时发现的。另一个可能的解决方案是编写您自己的权限类,在其中检查这两个权限中至少有一个是真的。我已经试过了。谢谢你的帮助。真难以置信,这不是内置的。。。我觉得没有那么多的用例用于和“ing”权限或“ing”权限。无论哪种方式,您都可以从这里获得: