Добавление атрибутов в интеграцию с LDAP

Настроил интеграцию. Пользователи создаются, всё хорошо, но хочется большего. В дополнении к существующим полям, нужно включить ещё пару-тройку полей. В частности требуется тянуть название подразделения. Подскажите как модифицировать текущий список атрибутов для синхронизации?

BPMO Service Enterprise, версия 7.14.0.597

Нравится

5 комментариев

Логика интеграции конкретных полей реализована в схеме LDAPUtilities, там есть структуры LdapUser и LdapGroup:

public struct LdapUser
{
	#region Fields: Public
 
	public string Id;
	public string Name;
	public string FullName;
	public string Company;
	public string Email;
	public string Phone;
	public string JobTitle;
	public bool IsActive;
	public string Dn;
	public DateTime ModifiedOn;
 
	#endregion
}
 
public struct LdapGroup
{
	#region Fields: Public
 
	public string Id;
	public string Name;
	public string Dn;
	public DateTime ModifiedOn;
 
	#endregion
 
	#region Constructors: Public
 
	public LdapGroup(string id, string name, string dn) {
		Id = id;
		Name = name;
		Dn = dn;
		ModifiedOn = DateTime.MinValue;
	}
 
#endregion
}

 И дальше есть методы, с ними работающие. Например:

private LdapUser CreateLdapUser(SearchResultEntry entry, string attributeDefValue) {
	LdapUser ldapUser = new LdapUser();
	ldapUser.Id = GetEntryIdentityAttribute(entry, _ldapUserIdentityAttribute);
	ldapUser.Name = GetEntryRequiredAttributeStringValue(entry, _ldapUserLoginAttribute);
	ldapUser.FullName = GetEntryAttributeStringValue(entry, _ldapUserFullNameAttribute, attributeDefValue);
	ldapUser.Company = GetEntryAttributeStringValue(entry, _ldapUserCompanyAttribute, attributeDefValue);
	ldapUser.Email = GetEntryAttributeStringValue(entry, _ldapUserEmailAttribute, attributeDefValue);
	ldapUser.Phone = GetEntryAttributeStringValue(entry, _ldapUserPhoneAttribute, attributeDefValue);
	ldapUser.JobTitle = GetEntryAttributeStringValue(entry, _ldapUserJobTitleAttribute, attributeDefValue);
	string accountControlAttributeValue =
		GetEntryAttributeStringValue(entry, LdapUserAccountControlAttributeName, string.Empty);
	ldapUser.IsActive = string.IsNullOrEmpty(accountControlAttributeValue) ||
		IsActive(accountControlAttributeValue);
	bool useLoginUserLDAPEntryDN = _userConnection.AppConnection.UseLoginUserLDAPEntryDN;
	ldapUser.Dn = useLoginUserLDAPEntryDN ? entry.DistinguishedName : attributeDefValue;
	ldapUser.ModifiedOn = GetEntryDateTimeAttributeValue(entry, _ldapEntryModifiedOnAttribute);
	return ldapUser;
}
 
private LdapGroup CreateLdapGroup(SearchResultEntry entry) {
	LdapGroup ldapGroup = new LdapGroup();
	ldapGroup.Id = GetEntryIdentityAttribute(entry, _ldapGroupIdentityAttribute);
	ldapGroup.Name = GetEntryRequiredAttributeStringValue(entry, _ldapGroupNameAttribute);
	ldapGroup.Dn = entry.DistinguishedName;
	ldapGroup.ModifiedOn = GetEntryDateTimeAttributeValue(entry, _ldapEntryModifiedOnAttribute);
	return ldapGroup;
}

Для добавления новых атрибутов потребуется дорабатывать по аналогии с существующими. Сами названия атрибутов, а также параметры подключения к LDAP не жёстко зашиты, а хранятся в системных настройках (все можно найти по «LDAP» в их коде) и считываются на ходу тут же в конструкторе класса LdapUtilities.

Зверев Александр,

А можно ли замещать исходный код c#, который касается интеграции Ldap, в случае, если требуется добавить несколько новых атрибутов?

Или потребуется на уровне БП "Синхронизировать данные о пользователях с LDAP" переключаться на дублирующую логику с расширенным числом атрибутов?

Можно создать UsrLdapUtilities, скопировать базовую логику, внести свои доработки, а затем найти все использования оригинальной LdapUtilities и подменить.

Зверев Александр,

Я верно понимаю, что замена будет идти в БП и js, а коробочный C# заменять таким образом нельзя (можно только создавать свое рядом)?

В БП можно создавать изменённые версии стандартных, они попадут с таким же именем в пакет Custom (или другой свой). Для JS есть ограничения, схемы-модули замещать нельзя.

Показать все комментарии