Corp/backend/employees/ldap/__init__.py
lizerk 95ff0dc0af refactor(ldap): заменить ldap3 CRUD на django-ldapdb ORM
- user_service.py: read_attrs/modify_user_attrs → LdapUser ORM,
  sync_user_groups_by_cns → ORM, delete_user без _ldap() контекста
- group_service.py: _wrapped методы через LdapGroup ORM
- department_service.py: _set_ou_description/_delete_department_ou → ORM
- views.py, employees.py: ldap_info через LdapUser ORM
- sync_employee_ids_to_ldap: полная замена на LdapUser ORM
- __init__.py: ORM реэкспорты, обёртки import_*/export_*
- orm_models.py: compatibility shim для django-ldapdb + Django 5.x
- Создан group_utils_orm.py (ORM замена group_utils)
- Удалён deprecated sync_service.py (352 строки)

TODO(ldap-orm) помечены: _set_password, _enable_user, _unique_logins,
_create_user_in_ldap, _move_user_to_base, rename (modify_dn),
sync_catalog (paged search), _set_ou_managed_by
2026-03-18 14:25:53 +03:00

136 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""Модуль синхронизации с Active Directory / LDAP.
Предоставляет высокоуровневые API для:
- Синхронизации пользователей, отделов и групп между LDAP и Django
- Управления объектами в LDAP (создание, обновление, удаление)
- Экспорта изменений из Django в LDAP
Архитектура (Clean Architecture):
domain/ - Бизнес-логика и DTO (независимые от инфраструктуры)
services/ - Бизнес-сервисы (UserService, DepartmentService и др.)
repositories/ - Слой доступа к данным (LDAP + DB)
infrastructure/ - Внешние подключения (LDAP)
utils/ - Вспомогательные функции (DN, группы, текст и др.)
Основное использование:
from employees.ldap import DirectoryService, DirectoryUserDTO, SyncConfig
# Создание пользователя через фасад
service = DirectoryService()
dto = DirectoryUserDTO(
first_name="Иван",
last_name="Иванов",
email="ivanov@example.com",
phone_e164="+79991234567",
department_dn="OU=IT,DC=example,DC=com",
group_cns=["Domain Users"],
initial_password="SecurePass123!",
is_active=True
)
employee = service.create_user(dto)
# Синхронизация из LDAP в Django
from employees.ldap import import_users
config = SyncConfig(mode='ldap', scope='users', dry_run=False)
created, updated, deleted = import_users(cfg=config)
# Синхронизация групп пользователя
from employees.ldap import sync_user_groups_by_cns, _ldap
with _ldap() as conn:
added, removed = sync_user_groups_by_cns(
conn, user_dn, target_cns=["IT Support"], do_write=True
)
"""
# Текущие импорты (для обратной совместимости)
from .directory_service import DirectoryService
from .services.sync_service import SyncService
# Конфигурация
from .config import SyncConfig, SyncMode, SyncScope, DISABLED_FLAG
# Ошибки
from .errors import (
DirectoryServiceError,
DirectoryLdapError,
DirectoryDbError,
DirectoryGroupError,
)
# DTO (из domain слоя)
from .domain.dtos import (
DirectoryUserDTO,
DirectoryDepartmentDTO,
LdapPersonDTO,
)
# Утилиты работы с группами
from .utils.group_utils import sync_user_groups_by_cns
from .utils.group_utils_orm import sync_user_groups_by_cns_orm
# ORM модели и сервисы
from .orm_models import LdapUser, LdapGroup, LdapOrganizationalUnit
from .orm_services import LdapOrmUserService, LdapOrmGroupService, LdapOrmDepartmentService
# Подключения
from .infrastructure.connections import _ldap
# Обратная совместимость: обёртки над SyncService
def import_departments(cfg=None):
"""Обёртка для SyncService().import_departments(cfg)."""
svc = SyncService()
return svc.import_departments(cfg or SyncConfig())
def import_users(cfg=None):
"""Обёртка для SyncService().import_users(cfg)."""
svc = SyncService()
return svc.import_users(cfg or SyncConfig())
def export_users(cfg=None):
"""Обёртка для SyncService().export_users(cfg)."""
svc = SyncService()
return svc.export_users(cfg or SyncConfig())
__all__ = [
# Сервисы
"DirectoryService",
"import_departments",
"import_users",
"export_users",
# Конфигурация
"SyncConfig",
"SyncMode",
"SyncScope",
"DISABLED_FLAG",
# Ошибки
"DirectoryServiceError",
"DirectoryLdapError",
"DirectoryDbError",
"DirectoryGroupError",
# DTO
"DirectoryUserDTO",
"DirectoryDepartmentDTO",
"LdapPersonDTO",
# Утилиты
"sync_user_groups_by_cns",
"sync_user_groups_by_cns_orm",
# ORM
"LdapUser",
"LdapGroup",
"LdapOrganizationalUnit",
"LdapOrmUserService",
"LdapOrmGroupService",
"LdapOrmDepartmentService",
# Подключения
"_ldap",
]