Я хочу, чтобы получить все разрешения для пользователя в списке premission идентификаторов, но:Как получить разрешения пользователя?
user.get_all_permissions()
дать мне список имен разрешений. Как это сделать?
Я хочу, чтобы получить все разрешения для пользователя в списке premission идентификаторов, но:Как получить разрешения пользователя?
user.get_all_permissions()
дать мне список имен разрешений. Как это сделать?
Ключ получить объекты разрешения, как это:
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)]
Надеюсь, это поможет!
Что делать, если пользователь находится в группе, которая имеет это разрешение? –
@AmoghTalpallikar У меня было решение решить эту проблему, о которой вы указали. – DRC
, чтобы получить все разрешения для данного пользователя, а также разрешения, связанные с группой этого пользователя является частью:
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)
Я использую этот код, но по какой-то причине он возвращает повторяющиеся разрешения. –
Здесь вы можете удалить дубликаты (предположительно, потому что это групповые и пользовательские разрешения): '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
зачем вам это? – karthikr
Мне нужно это, чтобы установить правильные флажки в ModelMultipleChoiceField в моей форме – Nips
ли вы раскрываете разрешения для приложения? это не очень хорошая идея. – karthikr