2016-12-28 2 views
1

Wie können einige Felder für bestimmte Benutzerberechtigungsstufen schreibgeschützt gemacht werden?Django-REST-API: Feld schreibgeschützt für Vorhang-Berechtigungsstufe erstellen

Es gibt ein Django-REST-API-Projekt. Es gibt einen Foo Serializer mit 2 Feldern - foo und bar. Es gibt 2 Berechtigungen - USER und ADMIN.

Serializer ist definiert als:

class FooSerializer(serializers.ModelSerializer): 
    ... 
    class Meta: 
     model = FooModel 
     fields = ['foo', 'bar'] 

Wie geht man sicher, ‚bar‘ macht Feld schreibgeschützt ist für USER und beschreibbare für ADMIN?

würde ich smth wie verwenden:

class FooSerializer(serializers.ModelSerializer): 
    ... 
    class Meta: 
     model = FooModel 
     fields = ['foo', 'bar'] 
     read_only_fields = ['bar'] 

Aber wie es abhängig machen (je nach Berechtigung)?

+0

Haben Sie lesen http://www.django-rest-framework.org/api-guide/permissions /? –

+0

Ja, habe die Referenz gelesen. Aber haben keine Informationen gefunden, die Informationen bereitstellen - wie bestimmte Felder für verschiedene Berechtigungen versteckt/angezeigt werden. – Oleg

Antwort

1

Sie können get_serializer_class() -Methode der Ansicht verwenden, um verschiedene Serializer für verschiedene Benutzer zu verwenden:

class ForUserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ExampleModel 
     fields = ('id', 'name', 'bar') 
     read_only_fields = ('bar',) 

class ForAdminSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = ExampleModel 
     fields = ('id', 'name', 'bar', 'for_admin_only_field') 

class ExampleView(viewsets.ModelViewSet):  
    ... 
    def get_serializer_class(self): 
     if self.request.user.is_admin: 
      return ForAdminSerializer 
     return ForUserSerializer 
+0

Dies ist die Lösung, die ich ausgewählt habe, es sei denn, es gibt eine bessere (generische) Möglichkeit, dies zu tun. Aber nach dem Lesen von Referenzseiten (einschließlich http://www.django-rest-framework.org/api-guide/permissions/), sieht es so aus, als gäbe es keine. – Oleg

Verwandte Themen