2013-05-15 2 views
16

Я хочу, чтобы получить все разрешения для пользователя в списке premission идентификаторов, но:Как получить разрешения пользователя?

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

Смежные вопросы