- Saved searches
- Use saved searches to filter your results more quickly
- License
- afteroot/ldap-phonebook
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- Создаём WEB адресный справочник PHP + LDAP
- Телефонный справочник из Active Directory за 5 минут
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
License
afteroot/ldap-phonebook
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Контакты делятся на два типа:
Импортированные контакты нельзя редактировать, их можно только скрывать из списка и указывать расположение на карте. Все изменения нужно производить в AD, после чего провести повторную синхронизацию, при которой будут добавлены новые и обновлены существующие контакты.
- Импорт контактов и фото из AD
- Показать/скрыть любой контакт
- Добавлять, редактировать и удалять локальные контакты
- Указать расположение контакта на плане офиса. Удобно для ориентирования в большой компании
- Экспорт в .xml файл для использования в приложении PhoneBook для Windows
- Бекап всех контактов с координатами в XML
- Восстановление контактов из XML бекапа
- Скрытие всех контактов, которые были отключены в AD
Карты хранятся в файлах templ/map4.png
Подключить модули расширения в php.ini или скомпилировать PHP с поддержкой LDAP
- Открыть в браузере install.php и заполнить предлагаемые параметры
- Заменить изображения карт templ/map4.png своими схемами
Дополнительные настройки в inc.config.php (опционально)
Для включения LDAP аутентификации в LDAP_ADMIN_GROUP_DN нужно указать группу AD через которую предоставляется доступ:
// Группа в AD с пользователями имеющими доступ на редактирование справочника define('LDAP_ADMIN_GROUP_DN', 'CN=Phonebook admin,OU=Admin Roles,OU=Groups,OU=Company,DC=domain,DC=local');
Изменить количество и названия карт:
define('PB_MAPS_COUNT', 5); $map_names = array('Floor 1', 'Floor 3', 'Floor 6', 'Floor 14', 'Floor 25');
Изменения в новых версиях
- Параметры LDAP_HOST и LDAP_PORT заменены на LDAP_URI. Пример: ldaps://dc-01 ldap://dc-02:389
- При обнолении пароли у учётных записей будут заменены на ‘admin’, т.к. функция PASSWORD больше не поддерживается MySQL. Их требуется сменить.
- Теперь аутентифакация LDAP и локальная работают параллельно. Для активации LDAP аутентификации в LDAP_ADMIN_GROUP_DN нужно указать группу доступа AD.
This service import users info from LDAP/AD to MySQL DB
Show selected contact on map
Corporate phone directory with contacts displayed on the office map
Contacts are divided into two types:
Imported contacts can not be edited, you can only hide them from the list and specify the location on the map. All that needs to be done in AD, then re-synchronize, which will be added new and updated.
- Import contacts and photos from AD
- Show / hide any contact
- Add, edit and delete local contacts
- Indicate the location of the contact on the office plan. Convenient for orientation in a large company
- Export to an .xml file for use in the Phonebook application for Windows
- Backup all contacts with coordinates to XML file
- Restore all contacts from XML file
- Hide all contacts that was disabled in AD
Maps are stored in the files templ / map 4 .png
Plug-ins in php.ini or compile PHP with LDAP support
- Open in the browser install.php and fill in the proposed parameters
- Replace the images of the maps templ / map 3 .png with their schemes
Создаём WEB адресный справочник PHP + LDAP
Так случилось, что у (относительно) большой кампании было много отдалённых офисов, в которых находилось приличное количество пользователей. Все офисы соединены в одну сеть с общим доменом, каждый офис был определён в Active Directory (далее по тексту AD) как Organization Unit (OU), в котором уже заводились пользователи.
Необходимо было дать пользователям возможность быстро и без особенных усилий получать контактные данные необходимого сотрудника из AD, а системных администраторов освободить от рутины редактирования текстового файла, который играл роль адресной книги.
Готовых подходящих вариантов для решения поставленной задачи не нашлось, поэтому пришлось делать всё своими руками и головой.
Начнём с того, что для начала нужно определиться что использовать, это просто — итоговый справочник должен быть доступен всем пользователям домена посредством браузера. Первое, что приходит на ум это PHP в связке с ldap, их и будем использовать. Большим плюсом использования PHP я считаю его относительную простоту — любой хоть немного понимающий системный администратор сможет внести, при необходимости, нужные правки в код, не особенно напрягаясь.
Итак, начнём. для начала зададим параметры подключения к домену:
$srv ="SERVER"; $srv_domain ="DOMAIN.COM"; $srv_login ="USERNAME@".$srv_domain; $srv_password ="PASSWORD";
Переменная $doscript нужна для того, чтобы хранить значение — определили ли мы OU, в котором будем искать пользователей или нет. Если не нашлось совпадений, перечисленных в «switch-case», то $doscript=false, главная часть скрипта выполняться не будет, а будет выведена стартовая страница «main_table.html» (о ней расскажу в самом конце).
Если же мы определили OU, тогда приступаем к дальнейшим действиям: начинаем рисовать пользователю страницу справочника:
Включаем стили для более приятного внешнего вида (да, их можно было подключить как css-файл, однако некоторые версии IE не хотят воспринимать стили, заданные таким образом, поэтому приходится писать прямо в скрипт):
* a a:hover #bold #table,tr,td /* Нечетные строки */#table tbody tr:nth-child(odd) /* Четные строки */ #table tbody tr:nth-child(even) #noborder #sp30px #smallsize #top #top:hover .smalltext .smalltext:hover .transition-rotate .transition-rotate:hover #lineheight
Со стилями покончено, теперь пишем заголовок вкладки и рисуем удобную ссылку возврата на главную страницу:
Определяем поисковые фильтры по AD, и получаем данные об OU:
$filter ="(&(objectcategory=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"; //все пользователи, кроме отключенных. $filter2 ="(objectCategory=OrganizationalUnit)"; // для получения информации о OU $ds=ldap_connect($srv); if ($ds) < $r=ldap_bind($ds,$srv_login,$srv_password);; ldap_set_option($ds,LDAP_OPT_REFERRALS, 0); ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3); $sr=ldap_search($ds,$dn ,$filter ); ldap_sort($ds,$sr, "givenname"); $info = ldap_get_entries($ds, $sr); $sr2=ldap_search($ds,$dn ,$filter2 ); $placeinfo = ldap_get_entries($ds, $sr2); $PlaceName = $placeinfo[0]["l"][0]; // name of place $PlaceAddres = $placeinfo[0]["street"][0]; // address of place $PlaceMail = $placeinfo[0]["description"][0]; // mail of place $PlacePhone = $placeinfo[0]["st"][0]; // phone of plase
Далее оформляем верхнюю часть страницы:
Далее получаем в цикле и обрабатываем данные пользователей, при этом, чтобы скрыть некоторые (например служебные) учётные записи, просто прописываем «hide» в поле «комната» в реквизитах пользователя в AD, такие пользователи не будут отображаться в справочнике:
Кстати, если вам потребуется получить значение другого атрибута, то помните (это важно):
в запросе передаём имя атрибута строчными буквами, иначе не заработает.
И вставляем полученные данные в таблицу:
echo " ". $n+=1 ." ". $UserName ."
". $UserPosition ." "; // Имя пользователя и должность if ($UserMail !='-') echo "$UserMail "; // если у пользователя есть e-mail создаём ссылку на отправку письма else echo "-"; //если нет e-mail - ставим прочерк. echo " ". $UserIpPhone ." ". $UserMobile ." "; > > echo "";
Далее мы закрываем подключение по ldap, или выводим сообщение о невозможности подключения к серверу:
ldap_close($ds); > else echo "Unable to connect to LDAP server
"; echo '
';>
Файл «main_table.html» изнутри себя представляет простую html страницу с ссылками, и выглядит примерно так:
Places and offices
OU1 OU2