web-dev-qa-db-ja.com

ユーザー権限を取得するにはどうすればよいですか?

ユーザーのすべての権限を権限IDのリストとして取得したいのですが、

user.get_all_permissions()

権限名のリストを教えてください。どうやってするの?

29
Nips

重要なのは、次のような権限オブジェクトを取得することです。

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

それが役に立てば幸い!

17
Paulo Bu

特定のユーザーのすべての権限を取得するには、このユーザーが所属するグループに関連付けられている権限も取得します。

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)
33
DRC

このようなリストにユーザーオブジェクトから直接ユーザー権限を取得できます

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

これを試して....

2

これは、単一のクエリで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()

または、Permissionを直接クエリします。

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


0
Moritz
from Django.contrib.auth.models import Permission
permissions = Permission.objects.filter(user=user)

permissions[0].id
0
Amey Dhuri