Права
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 | имя модели |
codename | codename права |
name | локализованное человекочитаемое имя |
PermissionAdminPage.permission должно быть правом view_*. См.
Свои страницы.
Действия и options
Row, list, object, table, import и export options принимают строку
permission: стандартный view / add / change / delete или свой
codename модели. System checks проверяют эти ссылки.
Нормализация имён
PermissionNameNormalizationService может нормализовать стандартные имена
прав Django. Заявленный язык сейчас — русский. Это деталь настройки прав, а
не то, что ModelAdmin вызывает напрямую.