Книга: C# для профессионалов. Том II
Получение имен свойств класса пользователя
Получение имен свойств класса пользователя
У нас есть имя LDAP для доступа к схеме. Можно использовать его для доступа к каталогу и для считывания свойств. Мы заинтересованы не только в свойствах класса User, но также в свойствах базовых классов для User
: Organizational-Person
, Person
и Top
. В этой программе имена базовых классов жестко закодированы. Можно было бы прочитать базовый класс динамически с помощью атрибута subClassOf
. Метод GetSchemaProperties()
возвращает строковый массив со всеми именами свойств определенного типа объектов. Все имена свойств собраны в объекте properties
типа StringCollection
:
protected void SetUserProperties(string schemaNamingContext) {
StringCollection properties = new StringCollection();
string[] data = GetSchemaProperties(schemaNamingContext, "User");
properties.AddRange(GetSchemaProperties(schemaNamingContext, "Organizational-Person"));
properties.AddRange(GetSchemaProperties(schemaNamingContext, "Person"));
properties.AddRange(GetSchemaProperties(schemaNamingContext, "Top"));
listBoxProperties.Items.Clear();
foreach (string s in properties) {
listBoxProperties.Items.Add(s);
}
}
В методе GetSchemaProperties()
мы снова обращаемся к активному каталогу. В этот раз вместо rootDSE
используется имя LDAP в схеме, которое мы обнаружили ранее. Свойство systemMayContain
содержит коллекцию всех атрибутов, которые допустимы в классе objectType
:
protected string[] GetSchemaProperties(string schemaNamingContext, string objectType) {
string [] data;
using (DirectoryEntry de = new DirectoryEntry()) {
de.Username = username;
de.Password = password;
de.Path = "LDAP://" + hostname + "/CN=" + objectType + "," + schemaNamingContext;
DS.PropertyCollection properties = de.Properties;
DS.PropertyValueCollection values = properties["systemMayContain"];
data = new String[values.Count];
values.CopyTo(data, 0);
}
return data;
}
Одно интересное замечание к этому коду: в приложении Windows Forms класс PropertyCollection
пространства имен System.DirectoryServices
имеет конфликт имен с System.Data.PropertyCollection
. Поскольку писать такие длинные имена как System.DirectoryServices.PropertyCollection
не всегда хочется, то с целью разрешения конфликта имя пространства имен можно сократить с помощью
namespace DS = System.DirectoryServices;
Именно отсюда появляется DS.PropertyCollection
.
Шаг 2 приложения завершен. Окно списка (listbox
) содержит все имена свойств объектов User
.
- Получение именующего контекста схемы
- Ширина и глубина ассортимента
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- 11.2. СВОЙСТВА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
- Сохранение информации о пользователях при миграции
- 3.4. Отношения между классами
- Получение статистики
- Категорийный менеджмент. Курс управления ассортиментом в рознице
- Реальный (RID) и эффективный (EUID) идентификаторы пользователя
- Имена индексов ограничений
- Пример применения метода «пять почему»
- Имена объектов длиной 68 символов