Django REST Framework:将数据记录访问权限限制为创建它们的用户

Nik*_*ach 3 django database-permissions user-permissions django-rest-framework

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

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

我必须创建多个表还是仅用一个表就可以实现相同的目的?如果必须使用多个表,如何将API请求与特定表相关联?

Nik*_*ach 5

好的,我找到了一种同时通过API和管理员执行此操作的方法。这基本上类似于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)
Run Code Online (Sandbox Code Playgroud)

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

MyItem.objects.filter(user=request.user)
Run Code Online (Sandbox Code Playgroud)

最后,要使其与Django REST Framework一起使用,我需要向我的自定义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
Run Code Online (Sandbox Code Playgroud)

我使用了文档和(很多)反复试验来弄清楚这一点。