Py学习  »  Django

Django rest framework视图集中的chainig权限

hamzeh_pm • 3 年前 • 1500 次点击  
class UserViewSet(viewsets.ModelViewSet):
    def list(self, request):
        users = User.objects.all()
        serializer = UserSerializer(users, many=True)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def create(self, request):
        serializer = UserSerializer(data=request.data)

        if serializer.is_valid(raise_exception=True):
            pass

    def retrieve(self, request, pk):
        user = get_object_or_404(User, pk=pk)
        self.check_object_permissions(request, user)
        serializer = UserSerializer(user)
        return Response(serializer.data, status=status.HTTP_200_OK)

    def get_permissions(self):
        if self.action == "list":
            permission_classes = [
                IsAdminUser,
            ]
        elif self.action == "create":
            permission_classes = [AllowAny]
        else:
            permission_classes = [AccountOwnerPermission | IsAdminUser ]

        return [permission() for permission in permission_classes]

自定义权限为:

class AccountOwnerPermission(permissions.BasePermission):
    def has_object_permission(self, request, view, obj):
        print(object)
        print(request.user)
        return obj == request.user

首先,我没有获得对象权限,但在@brian destura的帮助下,我解决了这个问题 the previous question 现在的问题是,当我将2个权限链接在一起时,它的行为就像 允许的 我一个接一个地检查它们,两个权限都正常工作,其中一个 允许管理员 其中一个 允许所有者 但当他们在一起或在一起时,一切都会一团糟

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129172
 
1500 次点击  
文章 [ 2 ]  |  最新文章 3 年前