2

我想弄清楚,用Django管理模型访问权限的最佳方法是什么。Django REST框架:限制数据记录访问创建它们的用户

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

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

如果你想仿制对象级的权限,那么你可以使用权限后端像 django-guardian

回答

3

好吧,我找到了一种方法来通过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) 

然后访问我的模型时,我只是通过用户过滤器(这是BTW的外键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 

我已经使用文档和(很多)试验和错误来弄清楚这一点。

+0

随时接受您自己的答案。 – Fiver

+0

对ModelViewSet有很大的帮助,谢谢! – galex

0

here例子是使用Django,restframework

0

进行积分,你可以对你的对象created_by场。然后比较django user。 没有一个具体的例子,这有点困难。

+0

你能更具体吗?就像您将如何生成该字段以及您在发送HTTP请求时如何比较用户一样? –