2016-12-28 15 views
1

特定のユーザー権限レベルで一部のフィールドを読み取り専用にするにはどうすればよいですか?Django REST API:カーテン権限レベルでフィールドを読み取り専用にする

Django REST APIプロジェクトがあります。 foobarの2つのフィールドを持つFooシリアライザがあります。 2つの許可 - USERADMINがあります。

シリアライザは、次のように定義されます

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

どのように1は、必ず「バー」フィールドは読み取り専用ですADMINためUSERと書き込み可能になりませんか?

私は次のようになめらかを使用します。

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

しかし、(許可に応じて)、それを条件付きにしますか?

+0

をあなたはhttp://www.django-rest-framework.org/api-guide/permissionsを読みました/? –

+0

はい、参照を読んでください。しかし、情報を提供する情報が見つかりませんでした - 異なる権限のために特定のフィールドを表示/非表示する方法 – Oleg

答えて

1

ユーザーごとに異なるシリアライザを使用するビューのget_serializer_class()メソッドを使用することができます

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

これを行うにはより良い(一般的な)方法がない限り、これは私が選んだ解決策です。しかし、参照ページ(http://www.django-rest-framework.org/api-guide/permissions/を含む)を読んだ後に、そうでないように見えます。 – Oleg

関連する問題