视图集的自定义权限

idi*_*dik 2 django http-method django-views django-rest-framework

我试图找到一种方法来创建视图集的自定义权限.我想实现这样的事情:

class ActivityViewSet(viewsets.ModelViewSet):
    queryset = Activity.objects.all()
    serializer_class = ActivitySerializer
    if request.method == 'PUT':
        permission_classes = (permissions.IsOwner)
    elif request.method == 'LIST':
        permission_classes = (permissions.IsAdmin)
    else :
        permission_classes = (permissions.AllowAny)
Run Code Online (Sandbox Code Playgroud)

IE:按方法排序权限.(上面的代码不起作用,因为"请求"未被识别)

在文档的"自定义权限"部分找不到任何用处,但也许我只是盲目.(重写BasePermission?怎么样?谁?在哪里?)

谢谢 :)

Iva*_*kin 5

Viewsets用于action确定HTTP是从get_permissions方法调用的动词和权限,因此您可以覆盖它:

class ActivityViewSet(viewsets.ModelViewSet):
    queryset = Activity.objects.all()
    serializer_class = ActivitySerializer

    def get_permissions(self):
        if self.action == 'update':
            return IsOwner()
        elif self.action == 'list':
            return IsAdminUser()
        else :
            return AllowAny()
Run Code Online (Sandbox Code Playgroud)

  • 我找到了原因...权限类必须位于列表中 (2认同)