首页 > 解决方案 > DRF Viewset 删除详细路线的权限

问题描述

我有一个基本的视图集:

class UsersViewSet(viewsets.ModelViewSet):
    permission_classes = (OnlyStaff,)
    queryset = User.objects.all()
    serializer_class = UserSerializer

它绑定到/api/users/端点。我想创建一个用户个人资料页面,所以我只需要一个特定的用户,所以我可以从中检索它/api/users/<id>/,但问题是我想/api/users/<id>/被允许任何人,但/api/users/要保持它的权限OnlyStaff,所以没有人可以访问完整的用户列表。

注意:也许这不是一个很好的实现,因为任何人都可以强制数据递增id,但我愿意将其从 更改<id><slug>

如何从详细路由中删除权限?

提前致谢。

标签: djangodjango-rest-frameworkdjango-permissions

解决方案


重写get_permissions()方法如下

from rest_framework.permissions import AllowAny


class UsersViewSet(viewsets.ModelViewSet):
    permission_classes = (OnlyStaff,)
    queryset = User.objects.all()
    serializer_class = UserSerializer

    def get_permissions(self):
        if self.action == 'retrieve':
            return [AllowAny(), ]        
        return super(UsersViewSet, self).get_permissions()

推荐阅读