Любые идеи по развитию MyChat. Запросы на новые функции, предложения по улучшению уже работающих сервисов. Если вы знаете, что нужно добавить в MyChat — welcome!
derwin
Вобщем, хочу, чтобы отключенных в AD юзеров чат не предлагал импортировать.
Аватара пользователя
Алексей Пикуров
Пока мы этого не умеем делать. Можно скрин, как именно они отключены у вас?
derwin
вот
Вложения
.JPG
derwin
что скажете?
Аватара пользователя
Алексей Пикуров
С помощью LDAP мы этого узнать не можем пока что. В будущем попробуем сделать.
Alibra
Поддерживаю.
у нас в AD тоже много "мертвых душ", которые совсем не нужны при импорте.
Maanse
Блокировка в LDAP осуществляется при помощи аттрибута userAccountControl (http://msdn.microsoft.com/en-us/library/windows/desktop/ms680832(v=vs.85).aspx)
Нужно вычислить ключ ADS_UF_ACCOUNTDISABLE = 0x00000002

Может я слегка криво пишу, но вот я вычисляю таким методом (vb6, в качестве uacData идет аттрибут userAccountControl):
Код: Выделить всё
Function checkStatus(uacData)
'===Массив ключей===
    Dim chisla(18)
    chisla(0) = 16777216:    chisla(1) = 8388608:    chisla(2) = 4194304:    chisla(3) = 2097152
    chisla(4) = 1048576:    chisla(5) = 524288:    chisla(6) = 262144:    chisla(7) = 131072
    chisla(8) = 65536:    chisla(9) = 8192:    chisla(10) = 4096:    chisla(11) = 2048
    chisla(12) = 512:    chisla(13) = 256:    chisla(14) = 128:    chisla(15) = 64
    chisla(16) = 32:    chisla(17) = 16:    chisla(18) = 8

'===Вычисляем ключи===
    For i = 0 To UBound(chisla)
        If uacData >= 0 Then
            x = uacData
        Else
            uacData = x
        End If
        uacData = uacData - chisla(i)
    Next
'===Определяем статус заблокирован\разблокирован===
    If uacData >= -6 Then
        checkStatus = 0
    Else
        checkStatus = 1
    End If
End Function


В данном случает "If uacData >= -6" значит, что если поставлен ключ 0x00000002 (тоесть 2) то при вычитании последнего ключа перед ним (0x00000008 ADS_UF_HOMEDIR_REQUIRED) получится какраз -6, тогда ставим "checkStatus = 0", тоесть заблокирован.
Аватара пользователя
Алексей Пикуров
Maanse, спасибо большое за наводку. Теперь мы делаем выборку LDAP запросом такого зубодробительного вида:
Код: Выделить всё
(&(objectCategory=person)(objectClass=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))

В новой версии заблокированные пользователи из Active Directory в MyChat импортироваться не будут.
Maanse
Думаю оптимальным вариантом будет сделать ввиде дополнительной настройки, чтото типа "Учитывать заблокированных"
Аватара пользователя
Алексей Пикуров
Так и будет, но уже в новой админке.