Je souhaite récupérer toutes les autorisations pour l'utilisateur sous forme de liste d'ID d'autorisation, mais:
user.get_all_permissions()
donnez-moi la liste des noms de permission. Comment faire?
La clé est d'obtenir les objets d'autorisation comme ceci:
from Django.contrib.auth.models import Permission
permissions = Permission.objects.filter(user=user)
et là vous pouvez accéder à la propriété id
comme ceci:
permissions[0].id
Si vous voulez la liste (id, permission_name)
procédez comme suit:
perm_Tuple = [(x.id, x.name) for x in Permission.objects.filter(user=user)]
J'espère que ça aide!
pour obtenir toutes les autorisations d'un utilisateur donné, également les autorisations associées à un groupe dont cet utilisateur fait partie:
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)
nous pouvons obtenir l'autorisation utilisateur des objets utilisateur directement dans une liste comme celle-ci
perm_list = user_obj.user_permissions.all().values_list('codename', flat=True)
Essaye ça....
Il s'agit d'une routine pour rechercher les objets Permission retournés par user.get_all_permissions()
dans une seule requête.
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()
Vous pouvez également interroger l'autorisation directement:
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()
from Django.contrib.auth.models import Permission
permissions = Permission.objects.filter(user=user)
permissions[0].id