2016-09-26 57 views
0

如何檢查用戶是permission_required裝飾器中的組的一部分?在permission_required中檢查用戶組成員資格

這是我現在,但它似乎並沒有檢查它..

@permission_required(['user.is_super_user', "'NormalUser' in user.groups.all"], raise_exception=True) 

據說這是爲了檢查用戶是否是超級用戶或用戶組的一部分NormalUser但當我嘗試訪問站點時,當用戶是NormalUser組的一部分時,它只是給我一個403錯誤。

有沒有辦法讓我做到這一點?我只想使用permission_required裝飾器,沒有別的:S

+1

「我只想使用permission_required裝飾器,沒有別的:S」爲什麼? – e4c5

+0

顧名思義,'permission_required'檢查當前用戶是否有給定的_permission_(https://docs.djangoproject.com/en/1.10/topics/auth/default/#permissions-and-authorization)。 –

回答

1

您應該使用user_passes_testpermission_required修飾器檢查權限。在這裏使用它沒有任何意義。

首先,您需要定義測試函數,返回True如果用戶是超級用戶,或者是NormalUser組:

def superuser_or_normaluser(user): 
    return user.is_superuser or user.groups.filter(name='NormalUser').exists() 

然後你可以使用測試功能與user_passes_test裝飾。

@user_passes_test(superuser_or_normaluser, raise_exception=True) 
1

我不相信你可以通過燙髮檢查像後者那樣在列表中,這是本質試圖執行一些Python代碼,這是行不通的。

理解你的用例實際上是很方便的,但是如果你嚴格只想使用permission_required裝飾器(而不是非常簡單地創建你自己的裝飾器,或者使用'user_passes_test'裝飾者,這似乎更合適),那麼我建議你應該add a custom permission在你的系統中的某個地方,將它添加爲你創建的「普通用戶」組的權限,然後只需測試(使用需要的權限)該權限的存在。

根據您的使用情況確定您創建此新權限的位置。也許它是在一個UserProfile類型的對象...