Django REST框架:将数据记录的访问权限制给创建它们的用户[英] Django REST Framework: restrict data records access to the users created them

本文是小编为大家收集整理的关于Django REST框架:将数据记录的访问权限制给创建它们的用户的处理方法,想解了Django REST框架:将数据记录的访问权限制给创建它们的用户的问题怎么解决?Django REST框架:将数据记录的访问权限制给创建它们的用户问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我试图弄清楚,用 Django 管理模型访问权限的最佳方法是什么.

我有一个属于创建它们的用户的项目表.通过 RESTful API 管理的所有项目.使用此 API 时,我想限制对给定用户创建的项目的访问.

我是否必须创建多个表,或者是否可以只使用一个表来实现?如果我必须使用多个表,如何将 API 请求与特定表关联起来?

推荐答案

好的,我找到了一种通过 API 和 admin 来完成的方法.这基本上类似于 Rob 的想法.

首先,每次我通过管理面板创建新用户时,我都需要将用户附加到我的项目:

class MyAdmin(admin.ModelAdmin):
    def save_model(self, request, obj, form, change):
        if getattr(obj, 'user', None) is None:
            obj.user = request.user
        obj.save()

admin.site.register(MyItem, MyAdmin)

然后在访问我的模型时,我只是按用户过滤(顺便说一句,这是 django.contrib.auth.models.User 的外键):

MyItem.objects.filter(user=request.user)

最后为了让它与 Django REST 框架一起工作,我需要向我的自定义 ModelViewSet 添加几个方法:

class MyItemViewSet(viewsets.ModelViewSet):
    model = MyItem
    serializer_class= MyItemSerializer

    def get_queryset(self):
        return MyItem.objects.filter(user=self.request.user)

    def pre_save(self, obj):
        obj.user = self.request.user

我已经使用文档和(大量)试验和错误来解决这个问题.

本文地址:https://www.itbaoku.cn/post/1793985.html