2016-07-06 2 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, ] 
    ... 

내가 모든 로그인 한 사용자가 얻을 수있을 싶어 이 뷰 집합에 POST합니다. 이것은 사용자 정의 유효성 검사기 또는 허가 일이다
:

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

내 질문에 종기 : 유일한 제한은 아닌 직원의 사용자가 100 아래 값을 유지하기 위해 이런 일을해야한다는 것입니다?

DRF (특히 mixins.CreateModelMixin)가 권한을 확인하지 않고 POST 된 데이터를 행복하게 저장한다는 것은 문제입니다. 나중에 만 사용 권한을 문의합니다 (get_object(), AFAICS).

유효성 검사기의 문제점은 request에 액세스 할 수 없다는 것이며 거기에 request을 삽입하려고 과도한 것처럼 보입니다.

무엇이 누락 되었습니까?


P.

PUTPATCH에도 동일한 제한을 적용해야합니다.

답변

1

사용자 정의 검사기 또는 권한에 대한 작업입니까?

이것은 유효성 검사 작업입니다.

유효성 검사기는 set_context 메서드를 통해 일반 컨텍스트에 액세스 할 수 있습니다. using set_context

을 참조하십시오.
관련 문제