是否可以为每个字段设置权限?

时间:2015-12-04 19:25:07

标签: django rest security permissions django-rest-framework

我正在用django-rest-framework构建一个rest api应用程序。我来到了我想要实施一些安全措施的阶段。 我有user个资源,其中包含以下字段firstname, lastname, dateofbirth(仅举几例)。所以在我的用户对象中,它们是私有字段和可以公开的字段。 有没有办法在drf Permission的响应基础上限制输出字段,或者如果没有什么是属中的最佳做法?

例如: 当身份1的用户使用:api/user/1时,他会:

{ "id": "1", "firstname":"john", "lastname":"Smith", "dateofbirth":"2015-11-11" }

当身份2的用户使用:api/user/1时,他会:

{ "id": "1", "firstname":"john", "lastname":"Smith" }

仅表示dateofbirth是私人的

1 个答案:

答案 0 :(得分:0)

您可以通过覆盖用户序列化程序中的 init 方法来执行此操作,如:

class UserSerializer(serializers.ModelSerializer):

    def __init__(self, *args, **kwargs):
        super(UserSerializer, self).__init__(*args, **kwargs)
        if 'pk' in kwargs:
            if not self.context['request'].user.id == kwargs['pk']:
                self.fields.pop('dateofbirth')

    class Meta:
        model = User
        fields = ('id', 'firstname', 'lastname', 'dateofbirth')

您也可以参考此question