2016-12-28 30 views
1

如何使某些字段對特定用戶權限級別爲只讀?Django REST API:使窗口權限級別的字段只讀

有一個Django REST API項目。有一個Foo串行器,帶有2個字段 - foobar。有2個權限 - USERADMIN

串行定義爲:

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

一個人怎麼可以確保「酒吧」字段只讀USER和可寫的ADMIN

我會用像水木清華:

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