我是否使用django rest框架(v3.4.6)對象級權限。但是,我無法弄清楚幾件事情。首先,我創建如果用戶在一家特定的商店,檢查自定義權限:Django REST框架檢查不必要的權限
class Works4Shop(BasePermission):
def has_object_permission(self, request, view, obj):
profile = request.user.profile
if obj.shop in profile.shops.all():
return True
else:
return False
我加入permission_classes = (Works4Shop,)
到一個新的自定義視圖類ShopItemsView(APIView)
現在開始好奇的部分首先我讀,我需要明確檢查通過調用self.check_object_permissions(request,obj)
來實現對象級權限。然而,我所看到的是,通過模型管理器獲取任何對象都會強制執行檢索對象上的策略。不完全,它確實稱爲has_object_permission(self, request, view, obj)
,但它忽略了結果。問題在於性能,這種事情給很多不必要的選擇給DB。任何人都可以解釋嗎?我也可以從數據庫中發佈日誌。
除了您的問題。你能解釋爲什麼你同時使用'profile = UserProfile.objects.get(user = request.user)'和'profile = request.user.profile'來分配配置文件嗎?我沒有看到兩者都需要 – rrmerugu
我的理解是,對象級權限旨在檢查每個返回的對象是否滿足此權限條件。也許你只需要一個常規的'has_permission()',每個請求檢查一次? – serg
@rrmerugu在複製代碼時,這是我的錯誤。我正在嘗試不同的方法來獲取配置文件。 – mrangry777