Перейти к основному содержимому

Права

Добавлено в 1.0.1

Chassis проверяет права Django. Он их не заменяет. Режим по умолчанию — group-only: staff-пользователь должен получить право через группу. Активные суперпользователи проверку обходят.

Проверка на запросе

from django_chassis.permissions import has_request_user_permission

if has_request_user_permission(request, 'catalog.view_book'):
...

Правила:

  • Нужны is_active и is_staff.
  • Суперпользователи проходят в режиме по умолчанию.
  • Остальные проверяются через user.get_group_permissions().

Chassis напрямую использует стандартный контракт пользователя Django Admin и не заменяет и не оборачивает request.user. Поэтому пользовательская модель AUTH_USER_MODEL должна предоставлять is_authenticated, is_active, is_staff, is_superuser, has_perm() и get_group_permissions().

CHASSIS_PERMISSION_CHECK

# settings.py
CHASSIS_PERMISSION_CHECK = 'group_only' # default
# CHASSIS_PERMISSION_CHECK = 'user_has_perm'
ЗначениеПоведение
group_onlyТолько групповые права; суперпользователь обходит проверку
user_has_permСтандартный user.has_perm()

Неподдерживаемое значение поднимает ImproperlyConfigured.

PermissionOption

Дополнительные права объявляются на сайте. Они регистрируются при создании и создаются после migrate сервисом PermissionInitializationService.

from django.utils.translation import gettext_lazy as _

from django_chassis.options import PermissionOption

export_books = PermissionOption(app_label='catalog', model='book', codename='export_book', name=_('Can export book'))


class CustomAdminSite(ChassisAdminSiteMixin, AdminSite):
chassis_permission_options = (export_books,)
ПараметрТип
app_labelметка приложения Django
modelимя модели
codenamecodename права
nameлокализованное человекочитаемое имя

PermissionAdminPage.permission должно быть правом view_*. См. Свои страницы.

Действия и options

Row, list, object, table, import и export options принимают строку permission: стандартный view / add / change / delete или свой codename модели. System checks проверяют эти ссылки.

Нормализация имён

PermissionNameNormalizationService может нормализовать стандартные имена прав Django. Заявленный язык сейчас — русский. Это деталь настройки прав, а не то, что ModelAdmin вызывает напрямую.

См. также