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

Класс Permission

Класс Permission является моделью, которая хранит информацию о разрешениях в системе Django. Каждое разрешение состоит из трех частей: имя (name), кодовое имя (codename) и ссылка на модель (content_type), к которой оно относится. Разрешения используются для контроля доступа пользователей и групп к определенным действиям в приложении. Обычно разрешения создаются автоматически при создании модели через встроенные операции: добавление, изменение, удаление и просмотр.

Синтаксис

from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType # Создание разрешения permission = Permission.objects.create( codename='can_publish_article', name='Может публиковать статьи', content_type=content_type )

Пример

Рассмотрим создание разрешения для модели статьи:

from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType from myapp.models import Article # Получаем ContentType для модели Article content_type = ContentType.objects.get_for_model(Article) # Создаем новое разрешение permission = Permission.objects.create( codename='can_archive_article', name='Может архивировать статьи', content_type=content_type ) print(permission.codename) print(permission.name)

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

"can_archive_article" "Может архивировать статьи"

Пример

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

from django.contrib.auth.models import Permission from django.contrib.contenttypes.models import ContentType from myapp.models import Article # Получаем все разрешения для модели Article content_type = ContentType.objects.get_for_model(Article) permissions = Permission.objects.filter(content_type=content_type) for perm in permissions: print(f"codename: {perm.codename}, name: {perm.name}")

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

"codename: add_article, name: Can add article" "codename: change_article, name: Can change article" "codename: delete_article, name: Can delete article" "codename: view_article, name: Can view article"

Пример

Назначим разрешение пользователю и проверим его наличие:

from django.contrib.auth.models import Permission, User from django.contrib.contenttypes.models import ContentType from myapp.models import Article # Получаем пользователя и разрешение user = User.objects.get(username='john') content_type = ContentType.objects.get_for_model(Article) permission = Permission.objects.get( codename='can_archive_article', content_type=content_type ) # Назначаем разрешение пользователю user.user_permissions.add(permission) # Проверяем наличие разрешения has_perm = user.has_perm('myapp.can_archive_article') print(f"User has permission: {has_perm}")

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

"User has permission: True"

Пример

Проверим разрешения, принадлежащие группе пользователей:

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') content_type = ContentType.objects.get_for_model(Article) permission = Permission.objects.get( codename='change_article', content_type=content_type ) group.permissions.add(permission) # Получаем все разрешения группы group_permissions = group.permissions.all() for perm in group_permissions: print(f"Group permission: {perm.codename}")

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

"Group permission: change_article"

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

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