[英]Override get_queryset based on django-guardian permissions
我正在嘗試基於對象權限覆蓋get_queryset
,而用戶權限來自django get_queryset
,因此只有用戶有權訪問的對象才可見。
def get_queryset(self, request):
if request.user.is_superuser:
qs = super(MyAdminInline, self).get_queryset(request)
return qs
for item in MyModel.objects.all():
for perm in get_perms(request.user, item):
things_user_can_see = get_objects_for_user(request.user, perm)
return things_user_can_see
遺憾的是,這實際上不執行任何操作,並且所有項目(無論用戶具有的權限)都是可見的。
首先,您需要了解視圖所需的權限。 然后,根據那些權限提取對象。
如果您不知道對象的權限,則可以按與模型相關的所有權限來過濾對象。
用於獲取的文檔 :
from guardian.shortcuts import get_objects_for_user, get_perms_for_model
class MyAdminInline():
def get_queryset(self, request):
if request.user.is_superuser:
qs = super(MyAdminInline, self).get_queryset(request)
return qs
all_model_perms = get_perms_for_model(MyModel)
return get_objects_for_user(request.user, all_model_perms)
就這樣! 無需遍歷每個對象,而無需檢查權限並返回錯誤的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.