Django-guardian. Добавляем управление разрешениями на уровне объектов

28 Май 2021 , 69

В предыдущей статье мы рассматривали разрешения(permissions), которые предоставляются из фреймворка Django. Они входят в пакет django.contrib.auth. Рассмотрели какие 4 разрешения Django создает для каждой модели по умолчанию.Рассмотрели как эти разрешения можно задавать определенным пользователям и назначать эти разрешения группам. Рассмотрели , как можно в модели определять другие специфические разрешения и как их создавать программно. Но все эти разрешения на уровне модели.

Что это значит ?

Допустим , когда мы создаем модель Post , то Django наряду с другими разрешениями по умолчанию создает разрешение change_post. И допустим, у нас есть пользователь Василий и мы ему задаем разрешение u>change_post. И теперь он может изменять все статьи , так как у него есть такое разрешение. А что если мы хотим дать разрешение на редактирование только определенным статьям (объектам модели Post ). Допустим есть четыре поста(объекта) и мы хотим дать Василию разрешение на редактирование первой и третьей статьи, а остальные статьи он не может редактировать. Вот для решения таких задач(упраление разрешениями на уровне объектов) мы и будем использовать замечательную библиотеку django-guardian

Django-guardian. Добавляем управление разрешениями на уровне объектов

Создадим новый проект blogproject. И установим библиотеку django-guardian


pip install django-guardian

Подключим django_guardian в наш проект в файле settings.py.Также в этом файле добавим бэкенды для авторизации , которые используются для работы django_guardian


INSTALLED_APPS = (
 #другие приложения
 'guardian',
)

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend', # Этот бэкенд Django использует по умолчанию
    'guardian.backends.ObjectPermissionBackend', # А это  бэкенд django_guardian
)

После применения миграций командой:


python manage.py migrate

Мы в базе данных увидим две таблицы , которые создал пакет django_guardian

Это таблицы guardian_userobjectpermission и guardian_groupobjectpermission

comments powered by Disqus

Подписка

Подпишитесь на наш список рассылки, чтобы получать обновления из блога

Рубрики

Теги