fix: use PositionService instead of DirectoryService for position groups
Problem: - When assigning/changing position, got 502 error - Error: 'DirectoryService' object has no attribute '_ensure_position_group' - Method was called on wrong service class Root Cause: DirectoryService doesn't have _ensure_position_group method. This method exists in PositionService (line 190 of position_service.py). Solution: - Import and use PositionService for position-specific operations - Keep DirectoryService for general group operations (add/remove members) - Use pos_svc._ensure_position_group() to create/get position group DN - Use dir_svc for add_group_members/remove_group_members Now position assignment/changes work correctly through LDAP sync.
This commit is contained in:
parent
aa9fcbe964
commit
298524ecc6
@ -280,20 +280,22 @@ class UserService:
|
||||
|
||||
try:
|
||||
if pos_in_payload and (old_pos != new_pos):
|
||||
# Временное решение - используем методы из DirectoryService
|
||||
# TODO: убрать после создания PositionService (Сессия 8)
|
||||
# Используем PositionService для синхронизации должностей
|
||||
from .position_service import PositionService
|
||||
from ..directory_service import DirectoryService
|
||||
import logging
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
svc = DirectoryService()
|
||||
pos_svc = PositionService()
|
||||
dir_svc = DirectoryService()
|
||||
|
||||
if old_pos:
|
||||
old_dn = (old_pos.ldap_group_dn or "").strip()
|
||||
if not old_dn:
|
||||
maybe = svc.find_group_dn(
|
||||
maybe = dir_svc.find_group_dn(
|
||||
conn,
|
||||
f"POS_{old_pos.name}",
|
||||
bases=[svc._positions_base()],
|
||||
bases=[dir_svc._positions_base()],
|
||||
)
|
||||
old_dn = maybe or ""
|
||||
if old_dn:
|
||||
@ -302,7 +304,7 @@ class UserService:
|
||||
f"Removing user {current_dn} "
|
||||
f"from position group {old_dn}"
|
||||
)
|
||||
svc.remove_group_members(
|
||||
dir_svc.remove_group_members(
|
||||
conn, old_dn, [current_dn]
|
||||
)
|
||||
except RuntimeError as e:
|
||||
@ -322,8 +324,8 @@ class UserService:
|
||||
raise
|
||||
|
||||
if new_pos:
|
||||
pos_dn = svc._ensure_position_group(conn, new_pos)
|
||||
svc.add_group_members(conn, pos_dn, [current_dn])
|
||||
pos_dn = pos_svc._ensure_position_group(conn, new_pos)
|
||||
dir_svc.add_group_members(conn, pos_dn, [current_dn])
|
||||
except Exception as e:
|
||||
raise DirectoryLdapError(
|
||||
f"LDAP position membership sync failed: {e}"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user