2016-12-28 28 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