我正在用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
是私人的
答案 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