我想检索用户的所有权限作为权限ID的列表,但:
user.get_all_permissions()
给予我权限名称列表。2怎么做?
3df52oht1#
获取给定用户的所有权限,以及与该用户所属组关联的权限:
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)
5f0d552i2#
关键是像这样获取权限对象:
from django.contrib.auth.models import Permission permissions = Permission.objects.filter(user=user)
在那里你可以访问id属性,如下所示:
id
permissions[0].id
如果需要列表(id, permission_name),请执行以下操作:
(id, permission_name)
perm_tuple = [(x.id, x.name) for x in Permission.objects.filter(user=user)]
希望能有所帮助!
hgqdbh6s3#
如果你使用的是Django 3.0+,user.get_user_permissions()会给出所有权限的代号。更多信息请访问:www.example.comhttps://docs.djangoproject.com/en/3.0/ref/contrib/auth/#django.contrib.auth.models.User.get_user_permissions
user.get_user_permissions()
rsl1atfo4#
我们可以将用户权限从用户对象直接放到如下列表中
perm_list = user_obj.user_permissions.all().values_list('codename', flat=True)
试试这个...
niknxzdl5#
这是一个例程,用于在单个查询中查询user.get_all_permissions()返回的Permission对象。
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()
htzpubme6#
from django.contrib.auth.models import Permission permissions = Permission.objects.filter(user=user) permissions[0].id
aamkag617#
返回user_obj具有的权限字符串集,包括用户权限和组权限。如果is_anonymous或is_active为False,则返回空集。user_permissions_list = request.user.get_all_permissions()返回user_obj从其所属组的权限中获得的权限字符串集。如果is_anonymous或is_active为False,则返回空集。request.user.get_group_permissions()返回user_obj从其自己的用户权限中获得的权限字符串集。如果is_anonymous或is_active为False,则返回空集。request.user.get_user_permissions()不幸的是,这些内置的方法给予我重复的查询。也可以使用权限表中自己的过滤器获取当前用户的所有权限user_permissions_list = list(Permission.objects.filter(Q(user=request.user) | Q(group__user=request.user)).values_list('codename', flat=True))文件
user_permissions_list = request.user.get_all_permissions()
request.user.get_group_permissions()
request.user.get_user_permissions()
user_permissions_list = list(Permission.objects.filter(Q(user=request.user) | Q(group__user=request.user)).values_list('codename', flat=True))
enxuqcxy8#
对@Shihabudheen K M答案的扩展和解释我们可以直接从用户对象中获取用户权限,查询集如下所示
perm_queryset = user_obj.user_permissions.all().values_list('id')
在这种情况下获得的查询集具有以下格式:
<QuerySet [(31,), (16,), (11,), (35,), (18,), (36,)]>
用户权限的扁平查询集:
flattened_perm_queryset = user_obj.user_permissions.all().values_list('id', flat=True)
输出:
<QuerySet [31, 16, 11, 35, 18, 36]>
要获取用户的这些权限的ID列表,您可以执行以下操作:
perm_list = list(user_obj.user_permissions.all().values_list('id', flat=True))
[31, 16, 11, 35, 18, 36]
希望这是有帮助的!
8条答案
按热度按时间3df52oht1#
获取给定用户的所有权限,以及与该用户所属组关联的权限:
5f0d552i2#
关键是像这样获取权限对象:
在那里你可以访问
id
属性,如下所示:如果需要列表
(id, permission_name)
,请执行以下操作:希望能有所帮助!
hgqdbh6s3#
如果你使用的是Django 3.0+,
user.get_user_permissions()
会给出所有权限的代号。更多信息请访问:www.example.comhttps://docs.djangoproject.com/en/3.0/ref/contrib/auth/#django.contrib.auth.models.User.get_user_permissions
rsl1atfo4#
我们可以将用户权限从用户对象直接放到如下列表中
试试这个...
niknxzdl5#
这是一个例程,用于在单个查询中查询
user.get_all_permissions()
返回的Permission对象。或者直接查询权限:
htzpubme6#
aamkag617#
返回user_obj具有的权限字符串集,包括用户权限和组权限。如果is_anonymous或is_active为False,则返回空集。
user_permissions_list = request.user.get_all_permissions()
返回user_obj从其所属组的权限中获得的权限字符串集。如果is_anonymous或is_active为False,则返回空集。
request.user.get_group_permissions()
返回user_obj从其自己的用户权限中获得的权限字符串集。如果is_anonymous或is_active为False,则返回空集。
request.user.get_user_permissions()
不幸的是,这些内置的方法给予我重复的查询。
也可以使用权限表中自己的过滤器获取当前用户的所有权限
user_permissions_list = list(Permission.objects.filter(Q(user=request.user) | Q(group__user=request.user)).values_list('codename', flat=True))
文件
enxuqcxy8#
对@Shihabudheen K M答案的扩展和解释
我们可以直接从用户对象中获取用户权限,查询集如下所示
在这种情况下获得的查询集具有以下格式:
用户权限的扁平查询集:
输出:
要获取用户的这些权限的ID列表,您可以执行以下操作:
输出:
希望这是有帮助的!