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

Пользователи и доступ

Добавлено в 1.0.1

Chassis поставляет модуль пользователей, который расширяет стандартный Django Admin: Users, Groups, административные сессии, ограничения попыток входа, профиль администратора, личная смена пароля, определение страны по GeoIP и журнал действий Admin.

В модуле нет продуктовых ролей, MFA и OIDC. Они остаются в приложении.

Что включает site

При include_users_module = True (значение по умолчанию) ChassisAdminSiteMixin:

  • регистрирует Chassis UserAdmin / GroupAdmin для AUTH_USER_MODEL и Group
  • регистрирует UserSession, LoginAttempt, LoginAttemptSchedule, AdminAuditLog
  • добавляет личные страницы Профиль и Изменить пароль
  • добавляет те же пункты в меню пользователя
  • вставляет в начало sidebar раздел Пользователи и группы
  • ставит ChassisAdminAuthenticationForm, если login_form не задан
  • показывает суперпользователю alert GeoIP, если Country-база недоступна

Отключить модуль на пустом тестовом site:

class CustomAdminSite(ChassisAdminSiteMixin, AdminSite):
include_users_module = False

Оставить админки и страницы, но описать sidebar самостоятельно:

class CustomAdminSite(ChassisAdminSiteMixin, AdminSite):
include_users_sidebar = False
sidebar_items = (
# свои разделы, включая auth.user / auth.group при необходимости
)

Стандартный раздел — это привычный список «Пользователи и группы» плюс модели доступа Chassis. Продуктовые роли сюда не попадают:

  • auth.User
  • auth.Group
  • django_chassis.UserSession
  • django_chassis.LoginAttemptSchedule
  • django_chassis.LoginAttempt
  • django_chassis.AdminAuditLog

Переопределите get_users_sidebar_section(), если нужны другие подписи или порядок.

Список сессий по умолчанию показывает активные сессии и предоставляет явные состояния Неактивные и Все. Действие завершения доступно только для активной чужой сессии при наличии соответствующего разрешения администратора.

Middleware

Подключите реестр сессий и журнал Admin после аутентификации:

MIDDLEWARE = [
# ...
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django_chassis.middlewares.UserSessionMiddleware',
'django_chassis.middlewares.AdminAuditMiddleware',
]

Сессии и журнал Admin пишут IP клиента через netaddr, браузер и ОС — через device-detector (User-Agent и Chromium Client Hints).

Оба middleware слушают CHASSIS_ADMIN_PATH_PREFIX (по умолчанию /admin/).

UserSessionMiddleware регистрирует текущую staff-сессию, обновляет last-seen не чаще раза в минуту и разлогинивает пользователя, если запись отозвана или истекла.

Таблицы базы данных

Изменено в 1.0.1

Модуль пользователей хранит данные в chassis_user_profiles, chassis_user_sessions, chassis_login_attempt_schedules, chassis_login_attempts и chassis_admin_audit_logs.

Настройки

НастройкаПо умолчаниюНазначение
CHASSIS_LOGIN_ATTEMPT_LIMITS_ENABLEDTrueПрименять задержки LoginAttemptSchedule
CHASSIS_ADMIN_PATH_PREFIX'/admin/'Префикс пути для middleware сессий и аудита
GEOIP_COUNTRY_DATABASE_PATHне заданАбсолютный путь к GeoLite2 Country .mmdb

Пустое расписание попыток входа означает отсутствие задержек. Строки настраиваются в Admin (у первой позиции delay_seconds=0).

GeoIP

Изменено в 1.0.1

geoip2 входит в пакет. Укажите файл MaxMind Country:

GEOIP_COUNTRY_DATABASE_PATH = '/var/lib/geoip/GeoLite2-Country.mmdb'

Если путь или файл отсутствуют, код страны остаётся пустым. Доверенные proxy-заголовки (CF-IPCountry, X-Country-Code, X-Geo-Country) читаются только при доступной базе.

Профиль и пароль

AdminProfileAdminPage — это PersonalAdminPage: текущий сотрудник видит учётную запись, группы, последний вход/IP/страну, текущую сессию и ленту своих записей журнала Admin. Блоков MFA и продуктовых ролей нет.

SelfPasswordChangeAdminPage использует Django PasswordChangeForm (нужен старый пароль) и затем завершает сессию.

См. также