Django-REST外键对象权限

我有以下django模型:

class Photo(models.Model):
    album = models.ForeignKey('Album', related_name='photos')
    owner = models.ForeignKey('auth.User')

class Album(models.Model):
    title = models.CharField(max_length=100)
    owner = models.ForeignKey('auth.User')

并获得IsOwner的许可

class IsOwner(permissions.BasePermission):
    """
    Custom permission to only allow owners to get it.
    """

    def has_object_permission(self, request, view, obj):

        return obj.owner == request.user

我需要阻止使用其他用户拥有的照片创建相册。目前,我使用此解决方案:

class AlbumSerializer(serializers.ModelSerializer):

    def create(self, validated_data):
        photos = validated_data.pop('photos')

        for _photo in photos:
            ph_obj = Photo.objects.get(id=_photo['id'])
            if self.context['request'].user == ph_obj.owner:
                ph_obj.album = album
                ph_obj.save()

但这并不完全正确。我也认为序列化程序必须针对这种情况引发某种异常。如何执行呢?谢谢。

ilse2005

您可以为编写自定义权限AlbumSerializer以执行检查:

class CustomerAccessPermission(permissions.BasePermission):
    message = 'You can only add your photos!'

    def has_permission(self, request, view):

        if view.action == 'create':
            for photo in request.POST.get('photos'):
                if not Photo.objects.filter(id=photo['id'], owner=request.user).exists():
                    return False
        return True

也许只有一个数据库查询会更好:

class CustomerAccessPermission(permissions.BasePermission):
    message = 'You can only add your photos!'

    def has_permission(self, request, view):

        if view.action == 'create':
            user_photos = Photo.objects.filter(owner=request.user).values_list('id', flat=True)
            for photo in request.POST.get('photos'):
                if not photo['id'] in user_photos:
                    return False
        return True

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在django-rest-framework中设置权限,以便会话用户只能列出对该用户具有外键的对象?

来自分类Dev

Django REST外键问题

来自分类Dev

Django:如何在Django Rest API类基本视图中保存外键对象

来自分类Dev

Django Rest Framework,如何在另一个外键中获取外键的对象数量

来自分类Dev

Django REST框架外键和过滤

来自分类Dev

Django rest框架无法保存外键

来自分类Dev

从 Django Rest Framework 渲染外键元素

来自分类Dev

限制选择并将django的外键验证为相关对象(也在REST中)

来自分类Dev

在Django Rest Framework中,如何限制要序列化的外键对象的数量

来自分类Dev

Django rest-framework如何序列化对象/外键

来自分类Dev

如何通过django REST中相关表的外键过滤模型对象

来自分类Dev

Django过滤外键对象中的字段

来自分类Dev

通过外键django过滤对象queryset

来自分类Dev

Django模型未设置外键对象

来自分类Dev

Django 在 Queryset 中获取外键对象

来自分类Dev

使用外键向后获取 django 对象

来自分类Dev

Django:隐藏特定的外键对象

来自分类Dev

django rest框架:对象字段权限

来自分类Dev

Django从已过滤的外键对象中过滤对象

来自分类Dev

Django:如何通过与外键相关的对象获取对象

来自分类Dev

将带有django-rest-framework-gis的外键对象序列化为geojson时出错

来自分类Dev

在 Django Rest Framework 中列出某些内容时,如何不仅仅显示对象的外键?

来自分类Dev

在Django Rest Framework中使用PUT更新外键

来自分类Dev

在Django Rest Framework中发布外键关系

来自分类Dev

Django-Rest-Framework通过ID更新外键

来自分类Dev

Django-rest-framework从id更新外键

来自分类Dev

Django Rest框架多个外键序列化

来自分类Dev

在Django Rest Framework中发布外键ID

来自分类Dev

Django rest框架外键返回为Integer

Related 相关文章

  1. 1

    如何在django-rest-framework中设置权限,以便会话用户只能列出对该用户具有外键的对象?

  2. 2

    Django REST外键问题

  3. 3

    Django:如何在Django Rest API类基本视图中保存外键对象

  4. 4

    Django Rest Framework,如何在另一个外键中获取外键的对象数量

  5. 5

    Django REST框架外键和过滤

  6. 6

    Django rest框架无法保存外键

  7. 7

    从 Django Rest Framework 渲染外键元素

  8. 8

    限制选择并将django的外键验证为相关对象(也在REST中)

  9. 9

    在Django Rest Framework中,如何限制要序列化的外键对象的数量

  10. 10

    Django rest-framework如何序列化对象/外键

  11. 11

    如何通过django REST中相关表的外键过滤模型对象

  12. 12

    Django过滤外键对象中的字段

  13. 13

    通过外键django过滤对象queryset

  14. 14

    Django模型未设置外键对象

  15. 15

    Django 在 Queryset 中获取外键对象

  16. 16

    使用外键向后获取 django 对象

  17. 17

    Django:隐藏特定的外键对象

  18. 18

    django rest框架:对象字段权限

  19. 19

    Django从已过滤的外键对象中过滤对象

  20. 20

    Django:如何通过与外键相关的对象获取对象

  21. 21

    将带有django-rest-framework-gis的外键对象序列化为geojson时出错

  22. 22

    在 Django Rest Framework 中列出某些内容时,如何不仅仅显示对象的外键?

  23. 23

    在Django Rest Framework中使用PUT更新外键

  24. 24

    在Django Rest Framework中发布外键关系

  25. 25

    Django-Rest-Framework通过ID更新外键

  26. 26

    Django-rest-framework从id更新外键

  27. 27

    Django Rest框架多个外键序列化

  28. 28

    在Django Rest Framework中发布外键ID

  29. 29

    Django rest框架外键返回为Integer

热门标签

归档