Django rest framework 全局权限不适用于 Viewset 的自定义权限

Django rest framework global permission not working with custom permission at Viewset

这是我的默认权限 类 的全局配置,已配置为使用 IsAuthenticated 权限。

    REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': ['rest_framework.authentication.SessionAuthentication',
                                       'rest_framework.authentication.TokenAuthentication', ],

    'DEFAULT_PERMISSION_CLASSES': ['rest_framework.permissions.IsAuthenticated', ],
    }

我希望经过身份验证的用户可以访问我的 API 因此,我在设置中全局配置了 IsAuthenticated 权限。我创建了另一个 IsAuthorOrReadOnly 自定义权限,它只允许 Post 的作者更新、删除,否则只能读取。这是我的视图集。

class PostViewSet(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    permission_classes = [IsAuthorOrReadOnly]

然而 PostViewSet API 可供匿名/每个用户访问。全局 Isauthenticated 权限不起作用。当我在 PostViewSet 的 permission_classes 上添加 IsAuthenticated 时,它起作用了。

不管实现了自定义权限,全局配置的权限不应该在项目中生效吗? 为什么全局配置的权限不能与 ViewSets 中的自定义权限一起使用?

DRF 文档说:

Note: when you set new permission classes through class attribute or decorators you're telling the view to ignore the default list set over the settings.py file.

所以在你的情况下,IsAuthorOrReadOnly,覆盖设置中定义的那个。

link: https://www.django-rest-framework.org/api-guide/permissions/