【问题标题】:accessing data inside request body while creating a customized permission在创建自定义权限时访问请求正文中的数据
【发布时间】:2022-01-22 12:27:49
【问题描述】:

我想根据 request.data 中的某个日期对用户进行身份验证 我从 BasePermission 和 impelement has_permission 方法继承。它迫使我在使用数据之前调用序列化程序的 is_valid() 。因此,如果请求无效或没有权限,则返回 false。我怎么能区分这两件事

class HasStoreAccess(BasePermission):
    def has_permission(self, request, view):
        request_serializer = ProductInventorySerializer(data=request.data, many=True)
        if request_serializer.is_valid():
            for item in request_serializer.data:
                if item['store_id'] != request.user.wim_user.store_id:
                    return False
            return True
        return False

【问题讨论】:

    标签: django-rest-framework django-permissions


    【解决方案1】:

    您可以尝试将请求验证包装在 try: except 块中。

    from rest_framework import serializers
    
    
    class HasStoreAccess(BasePermission):
        def has_permission(self, request, view):
            try:
                request_serializer = ProductInventorySerializer(data=request.data, many=True)
                request_serializer.is_valid(raise_exception=True)
            except serializers.ValidationError:
                return False  # request is not valid
            else:
                for item in request_serializer.data:
                    if item['store_id'] != request.user.wim_user.store_id:
                        return False  # no permission
                return True
    

    【讨论】:

      猜你喜欢
      • 2022-10-07
      • 2018-05-04
      • 1970-01-01
      • 1970-01-01
      • 2015-07-30
      • 1970-01-01
      • 2015-10-13
      • 2017-03-28
      • 1970-01-01
      相关资源
      最近更新 更多