Как получить пользовательские разрешения?

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

user.get_all_permissions()

дайте мне список имен разрешений. Как это сделать?

Ответ 1

Ключ получает объекты разрешения, подобные этому:

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)]

Надеюсь, поможет!

Ответ 2

для получения всех разрешений данного пользователя, а также разрешения, связанные с группой, в которую этот пользователь входит:

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)

Ответ 3

мы можем получить разрешение пользователя от объектов пользователя непосредственно в список, подобный этому

perm_list = user_obj.user_permissions.all().values_list('codename', flat=True)

Попробуй это....

Ответ 4

Это процедура для запроса объектов Permission, возвращаемых user.get_all_permissions() в одном запросе.

from functools import reduce
from operator import or_
from django.db.models import Q
from django.contrib.auth.models import Permission

def get_user_permission_objects(user):
    user_permission_strings = user.get_all_permissions()
    if len(user_permission_strings) > 0:
        perm_comps = [perm_string.split('.', 1) for perm_string in user_permission_strings]
        q_query = reduce(
            or_,
            [Q(content_type__app_label=app_label) & Q(codename=codename) for app_label, codename in perm_comps]
        )
        return Permission.objects.filter(q_query)
    else:
        return Permission.objects.none()

Кроме того, запрос разрешения напрямую:

from django.db.models import Q
from django.contrib.auth.models import Permission

def get_user_permission_objects(user):
    if user.is_superuser:
        return Permission.objects.all()
    else:
        return Permission.objects.filter(Q(user=user) | Q(group__user=user)).distinct()


Ответ 5

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

permissions[0].id