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請求時如何比較用戶一樣? –