2017-02-22 78 views
2

對象級別的權限

來自實例http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/#object-level-permissionsDjango的:對象級權限DRY

class IsOwnerOrReadOnly(permissions.BasePermission): 
    """ 
    Custom permission to only allow owners of an object to edit it. 
    """ 

    def has_object_permission(self, request, view, obj): 
     # Read permissions are allowed to any request, 
     # so we'll always allow GET, HEAD or OPTIONS requests. 
     if request.method in permissions.SAFE_METHODS: 
      return True 

     # Write permissions are only allowed to the owner of the snippet. 
     return obj.owner == request.user 

我的需求:所有的查詢集對象的用戶可以編輯

我想有一個Django的ORM查詢集其中包含給定用戶可以編輯的所有對象。

我想我可能會創建一個複雜的Django的ORM過濾器(使用OR和不同的)解決了這個

不會幹

但是,這不幹燥。這不是DRY,因爲我需要兩次編碼。有一次在has_object_permission()中,有一次在django-orm過濾器中。

問題

如何解決我的需要(所有的查詢集對象的用戶可以編輯)不重複的權限檢查?

回答

2

如果你想讓事情變得很乾燥,你必須加載整個數據庫條目並對每一個條目進行權限檢查。

我懷疑這就是你真正想要的。 有時你不能保持乾爽。

向用戶顯示數據時也是如此。您通常在執行查詢時隱式應用基本權限,然後確保完整權限是否有效。

+0

雖然這不是我正在尋找的答案:謝謝你考慮這個問題。 – guettli

+1

是的,這也是令我困擾的事情,這不適合Django REST框架。我期待着看看有沒有人有另一種選擇。 – Linovia