Какой фильтр LDAP лучше всего подходит для поиска пользователей в Active Directory? В моем примере фильтров я также исключаю отключенные учетные записи и учетные записи без адресов электронной почты.
Попробуйте поискать следующее имя: "имя отчество фамилия". Мой код анализирует это имя следующим образом:
$name = "firstname middlename lastname";
$nameArray = explode(" ", $name);
$fullName = $name;
$firsName = $nameArray[0];
$lastName = $nameArray[count($nameArray)-1];
Этот фильтр отлично работает, если вы ищите только «имя, фамилию» или «имя, отчество, фамилию», но не работает, если вы ищете «отчество»:
(&(!(userAccountControl:1.2.840.113556.1.4.803:=2))(mail=*)(givenname=$firstName*)(sn=$lastName*))
Этот фильтр работает так, как задумано, но очень медленно:
(&(!(userAccountControl:1.2.840.113556.1.4.803:=2))(mail=*)(|(&(givenname=$firstName*)(sn=$lastName*))(displayName=*$fullName*)))
DisplayName, конечно, содержит полное имя, но имеет формат «фамилия, имя, отчество». В идеальном мире у людей было бы 0 или 1 отчество или только одна фамилия, но, конечно, у них может быть и больше.
Есть предложения, как сделать хороший (быстрый) поисковый фильтр?