簡體   English   中英

根據django-guardian權限覆蓋get_queryset

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM