2016-07-06 105 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

相關問題