Раньше это было частным решением, теперь стало штатным функционалом, но, т.к. есть много неотвеченных вопросов по данной теме, считаю, что она заслуживает освещения в блоге. Итак, как задать структуру компании на сервере Active Directory и импортировать её в портал?
[spoiler]
История вопроса. С версии 8.5 Корпоративного портала работа с пользователями стала тесно завязана на структуру компании и принадлежность их к подразделениям. Пользователь, не принадлежащий какому-либо подразделению, перестал считаться сотрудником, и отображаться в гаджетах, списках и в поиске. В этом плане оказались обделены пользователи, импортированные в портал из Active Directory, т.к. никаких штатных средств для задания им привязки к подразделениям не было. Это можно было сделать только сторонним обработчиком, который и предлагалось использовать вплоть до выхода версии 9.0, в которой была представлена сначала возможность задать пользователям AD одно фиксированное подразделение, а потом и вовсе - полноценно импортировать структуру компании из AD.
Итак, какие возможности имеются? Можно специальным образом (об этом ниже) определить на AD сервере принадлежность пользователей к подразделениям, иерархию подразделений компании, а также начальников подразделений. При импорте пользователей в портал, эта структура также импортируется, при этом пользователям сразу назначаются нужные подразделения. Также, что более просто, можно задать одно фиксированное подразделение всем пользователям из AD.
Как задавать структуру компании в AD? Для этого используются всего 2 специальных свойства пользователя: department и manager. Department содержит символьное наименование подразделения, к которому относится данный пользователь. Здесь всё просто. В manager же, задается DN (Distinguished name, уникальный идентификатор в AD) пользователя, являющегося начальником данного. На основании этой связи и строится иерархия компании: Если начальник находится в другом подразделении, то это определяет связь между подразделениями: подразделение manager'а считается вышестоящим над данным. При этом текущий пользователь будет считаться начальником своего подразделения. Если manager - в том же подразделении, то никаких дополнительных действий предпринято не будет, и это единственный способ явно указать, что пользователь сам не является начальником подразделения. Из чего можно сделать вывод, что для всех подчиненных в подразделении должен быть задан начальник из него же.
Чтобы окончательно запутать читателя, можно упомянуть умолчания:
1. Если у пользователя не задано подразделение, но задан начальник, он считается принадлежащим тому же подразделению, что и начальник (для начальника будут также действовать все те же правила и умолчания, так что такие умолчательные определения могут выстроиться в последовательную цепочку)
2. Если задано подразделение, но нет начальника - данное подразделение попадает в корень структуры компании, и пользователь сам будет его начальником.
3. Если же у пользователя нет ни подразделения, ни начальника, ему будет присвоено подразделение по-умолчанию, задаваемое в настройках.
Как это настраивается в продукте? Настройки - AD/LDAP - свойства сервера. На закладке "Настройка полей" есть раздел "Отделы и структура компании". Устанавливаем галочку "Импортировать структуру компании из AD", задаем подразделение, в которое будет импортироваться структура. Можно просто выбрать "нет", и структура будет импортироваться в корень дерева подразделений. Но если хочется, чтобы она находилась где-то в фиксированном месте, можно задать это свойство. Также это будет очень полезно, если в компании несколько филиалов, каждый со своим сервером, тогда в структуре компании можно вручную создать подразделение для каждого филиала, и в настройках каждого сервера выбрать свое. Если при импорте имена подразделений в AD совпадут с существующими в портале - будут использованы существующие подразделения. Следующая галочка определяет, задавать ли подразделение по умолчанию пользователям, у которых не удается определить принадлежность к структуре (умолчание 3), и если да, то в следующем поле можно задать название этого подразделения. Это же поле работает как определение фиксированного подразделения для всех пользователей, если в AD нет структуры компании.
Когда все настройки сделаны, и структура компании в AD определена, можно проводить импорт. Импорт происходит постепенно, параллельно с импортом пользователей, или при обновлении их данных при логине. То есть, если пользователи уже в портале, можно просто ждать - например, когда зайдет пользователь из отдела техподдержки, у Вас появится этот отдел, и все вышестоящие. Когда зайдет из отдела продаж - появится отдел продаж, итд. Так будет постепенно заполняться структура. Это сделано, чтобы не создавать сразу большую нагрузку на портал и на AD сервер большим количеством запросов. Если же нужно импортировать всю структуру разом - сделайте полный импорт пользователей из AD, через форму импорта пользователей, при этом загрузится и структура.
[spoiler]
История вопроса. С версии 8.5 Корпоративного портала работа с пользователями стала тесно завязана на структуру компании и принадлежность их к подразделениям. Пользователь, не принадлежащий какому-либо подразделению, перестал считаться сотрудником, и отображаться в гаджетах, списках и в поиске. В этом плане оказались обделены пользователи, импортированные в портал из Active Directory, т.к. никаких штатных средств для задания им привязки к подразделениям не было. Это можно было сделать только сторонним обработчиком, который и предлагалось использовать вплоть до выхода версии 9.0, в которой была представлена сначала возможность задать пользователям AD одно фиксированное подразделение, а потом и вовсе - полноценно импортировать структуру компании из AD.
Итак, какие возможности имеются? Можно специальным образом (об этом ниже) определить на AD сервере принадлежность пользователей к подразделениям, иерархию подразделений компании, а также начальников подразделений. При импорте пользователей в портал, эта структура также импортируется, при этом пользователям сразу назначаются нужные подразделения. Также, что более просто, можно задать одно фиксированное подразделение всем пользователям из AD.
Как задавать структуру компании в AD? Для этого используются всего 2 специальных свойства пользователя: department и manager. Department содержит символьное наименование подразделения, к которому относится данный пользователь. Здесь всё просто. В manager же, задается DN (Distinguished name, уникальный идентификатор в AD) пользователя, являющегося начальником данного. На основании этой связи и строится иерархия компании: Если начальник находится в другом подразделении, то это определяет связь между подразделениями: подразделение manager'а считается вышестоящим над данным. При этом текущий пользователь будет считаться начальником своего подразделения. Если manager - в том же подразделении, то никаких дополнительных действий предпринято не будет, и это единственный способ явно указать, что пользователь сам не является начальником подразделения. Из чего можно сделать вывод, что для всех подчиненных в подразделении должен быть задан начальник из него же.
Чтобы окончательно запутать читателя, можно упомянуть умолчания:
1. Если у пользователя не задано подразделение, но задан начальник, он считается принадлежащим тому же подразделению, что и начальник (для начальника будут также действовать все те же правила и умолчания, так что такие умолчательные определения могут выстроиться в последовательную цепочку)
2. Если задано подразделение, но нет начальника - данное подразделение попадает в корень структуры компании, и пользователь сам будет его начальником.
3. Если же у пользователя нет ни подразделения, ни начальника, ему будет присвоено подразделение по-умолчанию, задаваемое в настройках.
Как это настраивается в продукте? Настройки - AD/LDAP - свойства сервера. На закладке "Настройка полей" есть раздел "Отделы и структура компании". Устанавливаем галочку "Импортировать структуру компании из AD", задаем подразделение, в которое будет импортироваться структура. Можно просто выбрать "нет", и структура будет импортироваться в корень дерева подразделений. Но если хочется, чтобы она находилась где-то в фиксированном месте, можно задать это свойство. Также это будет очень полезно, если в компании несколько филиалов, каждый со своим сервером, тогда в структуре компании можно вручную создать подразделение для каждого филиала, и в настройках каждого сервера выбрать свое. Если при импорте имена подразделений в AD совпадут с существующими в портале - будут использованы существующие подразделения. Следующая галочка определяет, задавать ли подразделение по умолчанию пользователям, у которых не удается определить принадлежность к структуре (умолчание 3), и если да, то в следующем поле можно задать название этого подразделения. Это же поле работает как определение фиксированного подразделения для всех пользователей, если в AD нет структуры компании.
Когда все настройки сделаны, и структура компании в AD определена, можно проводить импорт. Импорт происходит постепенно, параллельно с импортом пользователей, или при обновлении их данных при логине. То есть, если пользователи уже в портале, можно просто ждать - например, когда зайдет пользователь из отдела техподдержки, у Вас появится этот отдел, и все вышестоящие. Когда зайдет из отдела продаж - появится отдел продаж, итд. Так будет постепенно заполняться структура. Это сделано, чтобы не создавать сразу большую нагрузку на портал и на AD сервер большим количеством запросов. Если же нужно импортировать всю структуру разом - сделайте полный импорт пользователей из AD, через форму импорта пользователей, при этом загрузится и структура.