gpt4 book ai didi

python - Django Rest框架 View 集权限 "create"没有 "list"

转载 作者:行者123 更新时间:2023-12-02 07:27:05 25 4
gpt4 key购买 nike

我有以下 View 集:

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

def get_permissions(self):
if self.action in ['update','partial_update','destroy','list']:
self.permission_classes = [permissions.IsAdminUser,]
elif self.action in ['create']:
self.permission_classes = [permissions.IsAuthenticated,]
else :
self.permission_classes = [permissions.AllowAny,]
return super(self.__class__, self).get_permissions()

正如所见,对于经过身份验证的用户(不是管理员),我试图允许“创建”方法而不允许“列表”。奇怪的是,此 View 集不会为经过身份验证的用户创建也不会列出。我检查了以下代码:

class RouteOrderingDetail(mixins.CreateModelMixin, 
mixins.RetrieveModelMixin,
mixins.DestroyModelMixin,
mixins.UpdateModelMixin,
viewsets.GenericViewSet):
queryset = RouteOrdering.objects.all()
serializer_class = RouteOrderingSerializer

确实允许创建但没有列表的 View (但它对我来说不可用,因为我确实需要可用的列表选项。

希望问题已经清楚。任何帮助将不胜感激。

最佳答案

我意识到这个问题已经得到解答,但想分享我的实现,以防它更适合 OPS 用例或其他人的用例:

from rest_framework.authentication import TokenAuthentication, SessionAuthentication
from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework.viewsets import ReadOnlyModelViewSet

from ..models import MyModel
from .serializers import MyModelSerializer


class ActionBasedPermission(AllowAny):
"""
Grant or deny access to a view, based on a mapping in view.action_permissions
"""
def has_permission(self, request, view):
for klass, actions in getattr(view, 'action_permissions', {}).items():
if view.action in actions:
return klass().has_permission(request, view)
return False


class MyModelViewSet(ReadOnlyModelViewSet):
serializer_class = MyModelSerializer
queryset = MyModel.objects.all()

permission_classes = (ActionBasedPermission,)
action_permissions = {
IsAuthenticated: ['update', 'partial_update', 'destroy', 'list', 'create'],
AllowAny: ['retrieve']
}

authentication_classes = (TokenAuthentication, SessionAuthentication)

希望这对某人有帮助:)

关于python - Django Rest框架 View 集权限 "create"没有 "list",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39392007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com