2016-07-06 102 views
0

这应该是一个非常简单的问题,但我始终从DRF文档中绘制空白。拒绝某些用户的某些POST

models.py:

class DataPoint(models.Model): 
    value = models.IntegerField() 
    ... 

serializers.py:

class DataPointSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = DataPoint 
     fields = ('value', ...) 

views.py:

class DataPointViewSet(viewsets.ModelViewSet): 
    queryset = DataPoint.objects.all() 
    serializer_class = DataPointSerializer 
    permission_classes = [permissions.IsAuthenticated, ] 
    ... 

我希望每一个登录的用户能够得到和发布到此视图集。唯一的限制是,非员工用户需要保持低于100值,像这样:

if request.data['value'] > 100 and not request.user.is_staff: 
    raise PermissionDeniedValidationErrorWhatareyoudoing("Santaz gonna know") 

我的问题归结为:
这是一个自定义的验证或权限的工作吗?

有权限的问题是DRF(特别是mixins.CreateModelMixin)将高兴地保存已发布的数据而不检查权限。只有稍后才会查询权限(当调用get_object()时,AFAICS)。

验证器存在的问题是,他们无法访问request,并且在那里尝试注入request似乎是一种矫枉过正。

我错过了什么?


P.S.

同样的限制也应该适用于PUTPATCH

回答

1

这是一个自定义验证器或权限的工作吗?

这是一个验证工作。

验证程序通过它们的set_context方法可以访问一般上下文。见using set_context

相关问题