Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Miron-Anosov/2286aca0c8bec036624148479499d209 to your computer and use it in GitHub Desktop.
Save Miron-Anosov/2286aca0c8bec036624148479499d209 to your computer and use it in GitHub Desktop.

Группы и разрешения в Django

Введение

В Django встроена гибкая система аутентификации и управления разрешениями, которая позволяет назначать пользователям различные права доступа через группы и индивидуальные разрешения.

Группы в Django

Что такое группы?

Группа (Group) в Django — это логический контейнер для объединения пользователей. Группам можно назначать разрешения, а затем добавлять пользователей в эти группы. Это позволяет управлять правами доступа более удобно и централизованно.

Создание группы

Создать группу можно через Django Admin или программно:

from django.contrib.auth.models import Group

# Создание группы
group, created = Group.objects.get_or_create(name='Editors')

Добавление пользователя в группу

from django.contrib.auth.models import User

user = User.objects.get(username='example_user')
group = Group.objects.get(name='Editors')

# Добавляем пользователя в группу
user.groups.add(group)

Удаление пользователя из группы

user.groups.remove(group)

Проверка принадлежности к группе

if user.groups.filter(name='Editors').exists():
    print("Пользователь в группе 'Editors'")

Разрешения в Django

Что такое разрешения?

Разрешения (Permission) определяют, какие действия может выполнять пользователь в системе. Django автоматически создает разрешения для каждой модели (add, change, delete, view).

Разрешения по умолчанию

Код разрешения Описание
add_modelname Разрешение на создание объекта
change_modelname Разрешение на изменение объекта
delete_modelname Разрешение на удаление объекта
view_modelname Разрешение на просмотр объекта

Создание пользовательского разрешения

from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType
from myapp.models import MyModel

content_type = ContentType.objects.get_for_model(MyModel)
permission = Permission.objects.create(
    codename='custom_permission',
    name='Мое кастомное разрешение',
    content_type=content_type,
)

Добавление разрешений группе

group.permissions.add(permission)

Добавление разрешений пользователю

user.user_permissions.add(permission)

Проверка разрешений

if user.has_perm('myapp.custom_permission'):
    print("У пользователя есть это разрешение")

Важные моменты

  1. Django автоматически создает 4 разрешения для каждой модели в INSTALLED_APPS.
  2. Разрешения можно применять как к группам, так и индивидуально к пользователям.
  3. Проверка разрешений выполняется через user.has_perm().
  4. Группы помогают централизованно управлять разрешениями для нескольких пользователей.

Заключение

Группы и разрешения — мощный механизм для управления доступом в Django. Использование групп упрощает администрирование, а назначение разрешений позволяет гибко контролировать доступ к данным.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment