我想弄清楚,用Django管理模型訪問權限的最佳方法是什麼。Django REST框架:限制數據記錄訪問創建它們的用戶
我有一個屬於創建它們的用戶的項目表。所有項目都通過RESTful API進行管理。使用此API時,我想限制對由給定用戶創建的項目的訪問。
我是否必須創建幾個表或者是否可以用一個表實現相同? 如果我必須使用多個表,那麼如何將API請求與特定的表關聯起來?
如果你想仿製對象級的權限,那麼你可以使用權限後端像 django-guardian我想弄清楚,用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
我已經使用文檔和(很多)試驗和錯誤來弄清楚這一點。
,here例子是使用Django,restframework
進行積分,你可以對你的對象created_by
場。然後比較django user
。 沒有一個具體的例子,這有點困難。
你能更具體嗎?就像您將如何生成該字段以及您在發送HTTP請求時如何比較用戶一樣? –
隨時接受您自己的答案。 – Fiver
對ModelViewSet有很大的幫助,謝謝! – galex