0

Ich verwende Django Rest Framework und OAuthTookit.Django OAuthToolkit Scopes pro spezifische Methode

Ich möchte, dass der Bereich, der von dem Token bereitgestellt wird, HTTP Method specific sein sollte. Für zB: - GET, PUT, DELETE der gleichen APIView sollten unterschiedliche Bereiche haben.

Im Folgenden sind meine APIs.

class MyView(RetrieveUpdateDestroyAPIView): 
    permission_classes = [TokenHasScope] 
    required_scopes = ['scope1'] 
    serializer_class = ModelSerializer 
    queryset = Model.objects.all() 

Derzeit ist der Umfang auf Klassenebene festgelegt ist, was bedeutet, dass alle GET zuzugreifen, PUT & DELETE-Methode sollte die Token scope1 haben.

Ich möchte, dass es unterschiedliche Möglichkeiten für verschiedene HTTP-Methoden geben sollte. Wie kann ich unterschiedliche Möglichkeiten für verschiedene Methoden festlegen?

Antwort

1

diesen Fall zu behandeln, ich glaube, Sie brauchen eine neue Berechtigungsklasse, um so etwas zu implementieren:

class TokenHasScopeForMethod(TokenHasScope): 

    def has_permission(self, request, view): 
     token = request.auth 

     if not token: 
      return False 

     if hasattr(token, "scope"): 
      # Get the scopes required for the current method from the view 
      required_scopes = view.required_scopes_per_method[request.method] 

      return token.is_valid(required_scopes) 

Und es Ihrer Ansicht nach wie folgt verwenden:

class MyView(RetrieveUpdateDestroyAPIView): 
    permission_classes = [TokenHasScopeForMethod] 
    required_scopes_per_method = {'POST': ['post_scope'], 'GET': ['get_scope']} 
    serializer_class = ModelSerializer 
    queryset = Model.objects.all() 
+0

ehrfürchtig. Klappt wunderbar. (y) – PythonEnthusiast