Corp/backend/employees/ldap/ADMIN_GUIDE.md

8.5 KiB
Raw Blame History

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
Email Почтовый адрес
Django Employee Ссылка на связанную запись в БД (или ⚠️ если не найдена)
Синхронизация Статус последней синхронизации (⬆️ Django→LDAP, ⬇️ LDAP→Django)
Статус ✅ Активна или 🔒 Заблокирована

Детальная страница

Секции:

  1. 🔑 Идентификация — DN, CN, sAMAccountName, UPN, employeeNumber
  2. 👤 Персональные данные — Имя, фамилия, displayName, email
  3. 📞 Контакты — Телефон, мобильный
  4. ⚙️ Управление учетной записью — UAC флаги, описание
  5. 🖼️ Дополнительно — Фото (thumbnail)
  6. 👥 Членство в группах — Список AD-групп (до 10 + счетчик остальных)
  7. 🔄 Статус синхронизации — Подробная информация о связи с Django

Форматирование DN:

  • CN выделен синим
  • OU выделен серым
  • DC выделен светло-серым

🎯 Сценарии использования

Сценарий 1: Рассинхрон после ручного изменения в AD

Проблема: Админ изменил данные пользователя через Active Directory Users and Computers.

Решение:

  1. Перейдите в /admin/ldap/ldapuser/
  2. Найдите пользователя (поиск по CN/email/логину)
  3. Выберите → Actions → "Показать различия"
  4. Если LDAP актуальнее → Actions → "LDAP → Django"
  5. Проверьте в /admin/employees/employee/ что данные обновились

Сценарий 2: Рассинхрон после изменения в Django

Проблема: В Django Admin изменили телефон, но в LDAP старый номер.

Решение:

  1. Перейдите в /admin/ldap/ldapuser/
  2. Найдите пользователя
  3. Выберите → Actions → "Django → LDAP"
  4. Проверьте что номер обновился в AD

Сценарий 3: Пользователь не связан с Employee

Индикаторы:

  • В списке: Django Employee = "-"
  • На детальной странице: ⚠️ "Не связан с Django Employee"

Решение:

  1. Вручную установите employee_number в значение Employee.pk
  2. Сохраните
  3. Создайте LdapSyncState вручную в /admin/employees/ldapsyncstate/

Сценарий 4: Быстрое исправление атрибута

Проблема: Нужно срочно изменить email/телефон в LDAP.

Решение:

  1. Откройте пользователя в админке
  2. Измените поле mail или telephone_number
  3. Нажмите "Сохранить"
  4. ⚠️ Внимание: изменение напрямую в LDAP, без валидации
  5. Рекомендуется после этого запустить "Django → LDAP" для согласованности

⚙️ Технические детали

Ограничения

  1. Пагинация: Список ограничен первыми 100 пользователями (LDAP не поддерживает эффективную пагинацию)
  2. Создание запрещено: has_add_permission = False — создавайте через signals
  3. Удаление: Только для суперпользователей
  4. Поиск: По CN, sAMAccountName, mail, employeeNumber, givenName, sn

Безопасность

  • ✅ Actions с проверкой существования Employee
  • ✅ Try-except обработка ошибок
  • ✅ Детальные сообщения об ошибках
  • ⚠️ Прямое редактирование требует понимания структуры LDAP

Производительность

  • LDAP queries могут быть медленными
  • Рекомендуется использовать поиск вместо просмотра всего списка
  • Actions обрабатываются последовательно (не пакетно)

🔮 Планы развития

В будущих версиях:

  • LdapGroupAdmin — управление группами
  • LdapOrganizationalUnitAdmin — управление отделами (OU)
  • Пакетная синхронизация с progress bar
  • История изменений (audit log)
  • Предпросмотр изменений перед синхронизацией
  • Автоматическое определение источника истины по timestamp

📞 Поддержка

При возникновении проблем:

  1. Проверьте логи Django (logs/django.log)
  2. Проверьте статус LDAP-подключения
  3. Убедитесь что LdapSyncState актуален
  4. Используйте Action "Показать различия" для диагностики

Разработчик: Система создана на базе django-ldapdb 1.5.1