如何才能将权限类应用于详细路径?
class EventViewSet(viewsets.ModelViewSet):
@detail_route(methods=['post'])
def messages(self, request, pk=None):
### Check a permissions class.
...
答案 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)
不推荐使用详细路线,而推荐使用行动路线 所以现在看起来像这样。
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)