Класс Group

Класс Group из модуля django.contrib.auth.models предназначен для организации пользователей в группы с общими разрешениями. Каждая группа может содержать набор разрешений (permissions), которые автоматически применяются ко всем пользователям, входящим в эту группу. Это удобно для массового управления правами доступа, например, для создания групп "Модераторы", "Редакторы" или "Администраторы".

Основные атрибуты

Класс Group имеет следующие основные атрибуты:

Синтаксис

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

Пример

Давайте создадим группу "Редакторы" и добавим ей разрешение на изменение статей:

pythonfrom 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}")

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

python"Группа 'Редакторы' создана с разрешениями:"
"  - Can change article"

Пример

Давайте добавим пользователя в группу и проверим его разрешения:

pythonfrom 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}")

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

python"Пользователь john_doe имеет разрешение на изменение статей: True"
"Группы пользователя john_doe:"
"  - Редакторы"

Пример

Давайте создадим группу с несколькими разрешениями и удалим одно из них:

pythonfrom 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}")

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

python"Группа 'Полный доступ к статьям' имеет разрешения:"
"  - Can add article"
"  - Can change article"
"  - Can delete article"
"\nПосле удаления разрешения на добавление:"
"  - Can change article"
"  - Can delete article"

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

  • класс User,
    который представляет пользователя системы
  • класс Permission,
    который хранит разрешения для моделей
  • атрибут name,
    который содержит имя группы
  • атрибут permissions,
    который содержит разрешения группы