РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
568 of 818 menu

Атрибут permissions

Атрибут permissions класса Group предоставляет доступ к набору разрешений, связанных с группой пользователей. Это поле типа ManyToManyField, которое связывает группу с моделями Permission. Через этот атрибут можно добавлять, удалять и проверять наличие разрешений у группы. Группы используются для централизованного управления правами: вместо назначения разрешений каждому пользователю отдельно, их назначают группе, а пользователей добавляют в эту группу.

Синтаксис

from django.contrib.auth.models import Group, Permission # Получение группы group = Group.objects.get(name='moderators') # Получение всех разрешений группы permissions = group.permissions.all() # Добавление разрешения group.permissions.add(permission) # Удаление разрешения group.permissions.remove(permission) # Очистка всех разрешений group.permissions.clear() # Проверка наличия разрешения has_perm = group.permissions.filter(codename='can_edit_post').exists()

Пример

Создадим группу 'editors' и добавим ей разрешение на публикацию статей:

from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType from myapp.models import Article # Создаем группу group = Group.objects.create(name='editors') # Получаем разрешение 'can_publish_article' content_type = ContentType.objects.get_for_model(Article) permission = Permission.objects.get( content_type=content_type, codename='can_publish_article' ) # Добавляем разрешение группе group.permissions.add(permission) # Проверяем результат res = group.permissions.all() print(res)

Результат выполнения кода:

[<Permission: myapp | article | Can publish article>]

Пример

Проверим наличие нескольких разрешений у группы и удалим одно из них:

from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType from myapp.models import Article # Получаем группу group = Group.objects.get(name='editors') # Получаем разрешения content_type = ContentType.objects.get_for_model(Article) perm1 = Permission.objects.get( content_type=content_type, codename='can_publish_article' ) perm2 = Permission.objects.get( content_type=content_type, codename='can_edit_article' ) # Добавляем оба разрешения group.permissions.add(perm1, perm2) # Проверяем наличие разрешения has_perm = group.permissions.filter(codename='can_publish_article').exists() print(f"Has publish permission: {has_perm}") # Удаляем разрешение group.permissions.remove(perm1) # Проверяем снова has_perm = group.permissions.filter(codename='can_publish_article').exists() print(f"Has publish permission after removal: {has_perm}")

Результат выполнения кода:

"Has publish permission: True" "Has publish permission after removal: False"

Пример

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

from django.contrib.auth.models import Group # Получаем группу group = Group.objects.get(name='moderators') # Получаем все коды разрешений permission_codes = group.permissions.values_list('codename', flat=True) # Выводим результат res = list(permission_codes) print(res)

Результат выполнения кода:

["can_delete_comment", "can_edit_comment", "can_ban_user"]

Смотрите также

  • атрибут User.groups,
    который предоставляет доступ к группам пользователя
  • метод User.has_perm,
    который проверяет наличие разрешения у пользователя
  • метод User.has_perms,
    который проверяет наличие нескольких разрешений
  • класс Group,
    который предоставляет модель группы пользователей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить