Django REST框架:限制数据记录访问创建它们的用户
问题描述:
我想弄清楚,用Django管理模型访问权限的最佳方法是什么。Django REST框架:限制数据记录访问创建它们的用户
我有一个属于创建它们的用户的项目表。所有项目都通过RESTful API进行管理。使用此API时,我想限制对由给定用户创建的项目的访问。
我是否必须创建几个表或者是否可以用一个表实现相同? 如果我必须使用多个表,那么如何将API请求与特定的表关联起来?
如果你想仿制对象级的权限,那么你可以使用权限后端像 django-guardian
答
好吧,我找到了一种方法来通过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
我已经使用文档和(很多)试验和错误来弄清楚这一点。
答
进行积分,你可以对你的对象created_by
场。然后比较django user
。 没有一个具体的例子,这有点困难。
+0
你能更具体吗?就像您将如何生成该字段以及您在发送HTTP请求时如何比较用户一样? –
随时接受您自己的答案。 – Fiver
对ModelViewSet有很大的帮助,谢谢! – galex