8.5 KiB
8.5 KiB
LDAP Admin — Руководство по использованию
📋 Обзор
Добавлена админка для управления LDAP-моделями с поддержкой ручной синхронизации при рассинхроне.
Местоположение: /admin/ldap/ldapuser/
✨ Возможности
1. Просмотр LDAP-данных
- Список всех пользователей из Active Directory
- Детальная информация о каждом пользователе
- Статус синхронизации с Django Employee
- Членство в группах
- Статус учетной записи (активна/заблокирована)
2. Ручное редактирование
При клике на пользователя открывается форма редактирования:
- ✅ Можно редактировать все атрибуты (cn, givenName, sn, mail, telephoneNumber, mobile, userAccountControl)
- ⚠️ Осторожно: изменения идут напрямую в LDAP, минуя бизнес-логику
- 🔒 DN нельзя редактировать (это primary key)
3. Actions для синхронизации
🔄 LDAP → Django (LDAP как источник истины)
Выберите пользователей → Actions → "Синхронизировать LDAP → Django"
- Копирует данные из Active Directory в Django Employee
- Используется когда LDAP содержит актуальные данные
- Обновляет: first_name, last_name, email, phone_number
- Устанавливает
last_sync_dir = 'ldap'
🔄 Django → LDAP (Django как источник истины)
Выберите пользователей → Actions → "Синхронизировать Django → LDAP"
- Копирует данные из Django Employee в Active Directory
- Используется когда БД содержит актуальные данные
- Вызывает
UserService.update_user()(с полной бизнес-логикой) - Устанавливает
last_sync_dir = 'django'
🔍 Показать различия
Выберите пользователей → Actions → "Показать различия LDAP ↔ Django"
- Сравнивает поля: имя, фамилия, email, телефон
- Показывает расхождения в сообщении
- Помогает принять решение о направлении синхронизации
📊 Интерфейс
Список пользователей
| Колонка | Описание |
|---|---|
| CN (Common Name) | Имя пользователя с иконкой 👤 |
| sAMAccountName | Логин для входа в Windows |
| Почтовый адрес | |
| Django Employee | Ссылка на связанную запись в БД (или ⚠️ если не найдена) |
| Синхронизация | Статус последней синхронизации (⬆️ Django→LDAP, ⬇️ LDAP→Django) |
| Статус | ✅ Активна или 🔒 Заблокирована |
Детальная страница
Секции:
- 🔑 Идентификация — DN, CN, sAMAccountName, UPN, employeeNumber
- 👤 Персональные данные — Имя, фамилия, displayName, email
- 📞 Контакты — Телефон, мобильный
- ⚙️ Управление учетной записью — UAC флаги, описание
- 🖼️ Дополнительно — Фото (thumbnail)
- 👥 Членство в группах — Список AD-групп (до 10 + счетчик остальных)
- 🔄 Статус синхронизации — Подробная информация о связи с Django
Форматирование DN:
- CN выделен синим
- OU выделен серым
- DC выделен светло-серым
🎯 Сценарии использования
Сценарий 1: Рассинхрон после ручного изменения в AD
Проблема: Админ изменил данные пользователя через Active Directory Users and Computers.
Решение:
- Перейдите в
/admin/ldap/ldapuser/ - Найдите пользователя (поиск по CN/email/логину)
- Выберите → Actions → "Показать различия"
- Если LDAP актуальнее → Actions → "LDAP → Django"
- Проверьте в
/admin/employees/employee/что данные обновились
Сценарий 2: Рассинхрон после изменения в Django
Проблема: В Django Admin изменили телефон, но в LDAP старый номер.
Решение:
- Перейдите в
/admin/ldap/ldapuser/ - Найдите пользователя
- Выберите → Actions → "Django → LDAP"
- Проверьте что номер обновился в AD
Сценарий 3: Пользователь не связан с Employee
Индикаторы:
- В списке:
Django Employee= "-" - На детальной странице: ⚠️ "Не связан с Django Employee"
Решение:
- Вручную установите
employee_numberв значение Employee.pk - Сохраните
- Создайте LdapSyncState вручную в
/admin/employees/ldapsyncstate/
Сценарий 4: Быстрое исправление атрибута
Проблема: Нужно срочно изменить email/телефон в LDAP.
Решение:
- Откройте пользователя в админке
- Измените поле
mailилиtelephone_number - Нажмите "Сохранить"
- ⚠️ Внимание: изменение напрямую в LDAP, без валидации
- Рекомендуется после этого запустить "Django → LDAP" для согласованности
⚙️ Технические детали
Ограничения
- Пагинация: Список ограничен первыми 100 пользователями (LDAP не поддерживает эффективную пагинацию)
- Создание запрещено:
has_add_permission = False— создавайте через signals - Удаление: Только для суперпользователей
- Поиск: По CN, sAMAccountName, mail, employeeNumber, givenName, sn
Безопасность
- ✅ Actions с проверкой существования Employee
- ✅ Try-except обработка ошибок
- ✅ Детальные сообщения об ошибках
- ⚠️ Прямое редактирование требует понимания структуры LDAP
Производительность
- LDAP queries могут быть медленными
- Рекомендуется использовать поиск вместо просмотра всего списка
- Actions обрабатываются последовательно (не пакетно)
🔮 Планы развития
В будущих версиях:
- LdapGroupAdmin — управление группами
- LdapOrganizationalUnitAdmin — управление отделами (OU)
- Пакетная синхронизация с progress bar
- История изменений (audit log)
- Предпросмотр изменений перед синхронизацией
- Автоматическое определение источника истины по timestamp
📞 Поддержка
При возникновении проблем:
- Проверьте логи Django (
logs/django.log) - Проверьте статус LDAP-подключения
- Убедитесь что
LdapSyncStateактуален - Используйте Action "Показать различия" для диагностики
Разработчик: Система создана на базе django-ldapdb 1.5.1