【问题标题】:Django Rest Framework serialize permissionDjango Rest Framework 序列化权限
【发布时间】:2014-01-31 16:56:27
【问题描述】:

我想序列化对象级权限 - 并向浏览器发送一个简单的 TrueFalse - 因此我触发了“允许编辑”代码。

我这样做是为了让用户没有他们无法使用的功能。

有没有内置的方法来做到这一点?文档没有提到这一点。

我在序列化程序上尝试了以下操作:

has_permission = serializers.SerializerMethodField('check_permission')

def check_permission(self, obj):
    return self.check_object_permissions(self.request, obj)

但序列化程序没有方法check_object_permissions - 属于权限对象。

【问题讨论】:

    标签: django permissions django-rest-framework


    【解决方案1】:

    向您的模型添加方法以检查权限:

     class MyModel(models.Model):
         myfield = models.TextField(max_length=100)
    
         def check_permissions(self):
            # Perform your permissions functions
            if (.....):
               return True
            else: 
               return False
    

    将自定义字段添加到您的序列化程序中,如下所示:

      class MyModelSerializer(serializers.ModelSerializer):        
          has_permissions = serializers.BooleanField(source='check_permissions', read_only=True)
          class Meta:
             model = models.MyModel
             fields = ("myfield","has_permissions")
    

    【讨论】:

    • 或者,如果您需要了解用户,使用序列化器方法并通过序列化器上下文访问当前用户。
    • 这打破了分层:我必须将 rest_framework.permissions 导入到 models.py 中,除非我使用奇怪的意大利面条,否则我将无法在不同的视图上为相同的模型使用不同的权限跨度>
    • 要保持分层,您可以使用 Django User Auth 并覆盖视图上的 permission_denied 方法。
    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 2015-06-29
    • 2015-01-12
    相关资源
    最近更新 更多