DRF 视图集删除详细路线的权限

yie*_*tem 5 django django-permissions django-rest-framework

我有一个基本的视图集:

class UsersViewSet(viewsets.ModelViewSet):
    permission_classes = (OnlyStaff,)
    queryset = User.objects.all()
    serializer_class = UserSerializer
Run Code Online (Sandbox Code Playgroud)

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

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

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

提前致谢。

JPG*_*JPG 14

重写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()
Run Code Online (Sandbox Code Playgroud)

  • 再次感谢。所以覆盖特定方法的权限的有效方法是覆盖`get_permissions()`,而不是属性`permission_classes`。 (2认同)