在详细路径上使用权限类

时间:2015-03-30 20:56:43

标签: django django-rest-framework

如何才能将权限类应用于详细路径?

class EventViewSet(viewsets.ModelViewSet):

    @detail_route(methods=['post'])
    def messages(self, request, pk=None):
        ### Check a permissions class.
        ...

3 个答案:

答案 0 :(得分:17)

您可以基本上通过以下方式添加权限:

class EventViewSet(viewsets.ModelViewSet):
    @detail_route(
        permission_classes=[
            permissions.PermissionClass_],
        methods=['post'])
    def messages(self, request, pk=None):
        ### Check a permissions class.
        ...

答案 1 :(得分:0)

如果您在ViewSet中的自定义操作中遇到了permissions_classes问题,请尝试在您的操作中使用此装饰器。可能最新的Django Rest Framework并没有考虑权限。这种情况的解决方案是在每个自定义操作的开始时自己检查它或使用以下装饰器:

def check_permissions(fun):
    def ref(self, request, pk=None):
        obj = get_object_or_404(self.get_queryset(), pk=pk)
        self.check_object_permissions(self.request, obj)

        return fun(self, request, pk)

    return ref

答案 2 :(得分:0)

django rest 3.8中的

不推荐使用详细路线,而推荐使用行动路线 所以现在看起来像这样。

from rest_framework.decorators import api_view, permission_classes

class EventViewSet(viewsets.ModelViewSet):

    @action(
        methods=['post'],
        detail=True,
        url_path='messages')
    @permission_classes((YourPermission,))
    def messages(self, request, pk=None):

        return Response("200", status=200)