Класс Group
Класс Group из модуля django.contrib.auth.models
предназначен для организации пользователей в группы
с общими разрешениями. Каждая группа может содержать
набор разрешений (permissions), которые автоматически
применяются ко всем пользователям, входящим в эту группу.
Это удобно для массового управления правами доступа,
например, для создания групп "Модераторы", "Редакторы"
или "Администраторы".
Основные атрибуты
Класс Group имеет следующие основные атрибуты:
-
name- уникальное имя группы (строка, обязательное поле) -
permissions- поле ManyToManyField, связывающее группу с разрешениями из моделиPermission
Синтаксис
from django.contrib.auth.models import Group, Permission
# Создание группы
group = Group.objects.create(name="group_name")
# Добавление разрешений
permission = Permission.objects.get(codename="permission_name")
group.permissions.add(permission)
Пример
Давайте создадим группу "Редакторы" и добавим ей разрешение на изменение статей:
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from myapp.models import Article
# Получаем тип контента для модели Article
content_type = ContentType.objects.get_for_model(Article)
# Получаем разрешение на изменение
permission = Permission.objects.get(
content_type=content_type,
codename="change_article"
)
# Создаем группу и добавляем разрешение
group = Group.objects.create(name="Редакторы")
group.permissions.add(permission)
print(f"Группа '{group.name}' создана с разрешениями:")
for perm in group.permissions.all():
print(f" - {perm.name}")
Результат выполнения кода:
"Группа 'Редакторы' создана с разрешениями:"
" - Can change article"
Пример
Давайте добавим пользователя в группу и проверим его разрешения:
from django.contrib.auth.models import Group, User
# Получаем группу и пользователя
group = Group.objects.get(name="Редакторы")
user = User.objects.get(username="john_doe")
# Добавляем пользователя в группу
user.groups.add(group)
user.save()
# Проверяем разрешения пользователя
has_perm = user.has_perm("myapp.change_article")
print(f"Пользователь {user.username} имеет разрешение на изменение статей: {has_perm}")
# Выводим все группы пользователя
print(f"Группы пользователя {user.username}:")
for g in user.groups.all():
print(f" - {g.name}")
Результат выполнения кода:
"Пользователь john_doe имеет разрешение на изменение статей: True"
"Группы пользователя john_doe:"
" - Редакторы"
Пример
Давайте создадим группу с несколькими разрешениями и удалим одно из них:
from django.contrib.auth.models import Group, 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,
codename__in=["add_article", "change_article", "delete_article"]
)
# Создаем группу и добавляем все разрешения
group = Group.objects.create(name="Полный доступ к статьям")
group.permissions.set(permissions)
print(f"Группа '{group.name}' имеет разрешения:")
for perm in group.permissions.all():
print(f" - {perm.name}")
# Удаляем разрешение на добавление
delete_perm = Permission.objects.get(
content_type=content_type,
codename="add_article"
)
group.permissions.remove(delete_perm)
print(f"\nПосле удаления разрешения на добавление:")
for perm in group.permissions.all():
print(f" - {perm.name}")
Результат выполнения кода:
"Группа 'Полный доступ к статьям' имеет разрешения:"
" - Can add article"
" - Can change article"
" - Can delete article"
"\nПосле удаления разрешения на добавление:"
" - Can change article"
" - Can delete article"
Смотрите также
-
класс
User,
который представляет пользователя системы -
класс
Permission,
который хранит разрешения для моделей -
атрибут
name,
который содержит имя группы -
атрибут
permissions,
который содержит разрешения группы