2013-05-15 37 views
16

我想檢索用戶的所有權限爲premission ID的名單,但是:如何獲取用戶權限?

user.get_all_permissions() 

給我的許可名單。怎麼做?

+0

爲什麼你需要嗎? – karthikr

+0

我需要這個在ModelMultipleChoiceField中以我的形式設置適當的複選框 – Nips

+0

您是否嚮應用程序公開權限?這不是一個好主意。 – karthikr

回答

11

的關鍵是得到這樣的許可對象:

from django.contrib.auth.models import Permission 
permissions = Permission.objects.filter(user=user) 

在那裏你可以訪問id屬性是這樣的:

permissions[0].id 

如果您想要列表(id, permission_name)做到以下幾點:

perm_tuple = [(x.id, x.name) for x in Permission.objects.filter(user=user)] 

希望它有幫助!

+0

如果用戶在具有該權限的組中,該怎麼辦? –

+0

@AmoghTalpallikar我已經開始討論你指出的這個問題。 – DRC

18

得到一組該用戶的部分相關聯的給定用戶的所有權限,還權限:

from django.contrib.auth.models import Permission 

def get_user_permissions(user): 
    if user.is_superuser: 
     return Permission.objects.all() 
    return user.user_permissions.all() | Permission.objects.filter(group__user=user) 
+0

我使用這段代碼,但由於某種原因它返回了重複的權限。 –

+0

這裏有一個刪除重複項的選項(大概是因爲它們是組和用戶權限):'list(set(chain(user.user_permissions.filter(content_type = ctype).values_list('codename',flat = True),Permission。 objects.filter(group__user = user,content_type = ctype).values_list('codename',flat = True))))'可疑鏈有時比|更有效。 values_list調用和按內容類型篩選是不必要的,但根據您的需要還有其他選項。 – Chris