Nik*_*ach 3 django database-permissions user-permissions django-rest-framework
我试图弄清楚,使用Django管理模型访问权限的最佳方法是什么。
我有一个属于创建它们的用户的项目表。所有项目都通过RESTful API进行管理。使用此API时,我想限制对给定用户创建的项目的访问。
我必须创建多个表还是仅用一个表就可以实现相同的目的?如果必须使用多个表,如何将API请求与特定表相关联?
好的,我找到了一种同时通过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)
我使用了文档和(很多)反复试验来弄清楚这一点。
| 归档时间: |
|
| 查看次数: |
1763 次 |
| 最近记录: |