【问题标题】:Is it possible to set permission per field?是否可以为每个字段设置权限?
【发布时间】:2016-03-09 20:03:49
【问题描述】:

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

例如: 当 id 为 1 的用户使用:api/user/1 他得到:

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

当 id 为 2 的用户使用:api/user/1 他得到:

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

这只是说dateofbirth 是一个私人文件

【问题讨论】:

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


    【解决方案1】:

    您可以通过覆盖用户序列化程序中的 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

    【讨论】:

    • 谢谢,听起来像是个开始。但我认为我宁愿创建 2 个序列化程序,并在 api 视图上使用 get_serializer 方法。
    猜你喜欢
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2011-07-03
    • 2020-12-29
    • 2015-09-11
    • 2021-01-08
    • 1970-01-01
    • 2019-04-04
    相关资源
    最近更新 更多