Ограничение атрибутов, возвращаемых в запросе LDAP - PullRequest
0 голосов
/ 03 октября 2011

Как ограничить атрибуты, возвращаемые в запросе LDAP через System.DirectoryServices?

Я использую DirectorySearcher и добавляю нужные свойства в DirectorySearcher.PropertiesToLoad. Проблема в том, что это просто гарантирует, что добавленные свойства включены в DirectoryEntry.Properties, а также в некоторый список по умолчанию. Есть ли способ указать только те свойства, которые вы хотите вернуть?

DirectoryEntry base = new DiectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind);
DirectorySearcher groupSearcher = new DirectorySearcher(base);
groupSearcher.Filter = "(objectClass=group)";
groupSearcher.PropertiesToLoad.Add("distinguishedName");
groupSearcher.PropertiesToLoad.Add("description");
foreach (SearchResult groupSr in groupDs.FindAll())
...

Внутри цикла foreach, когда я получаю группу DirectoryEntry, существует около 16 различных свойств, к которым я могу получить доступ, а не только к двум, которые я указывал (Отличительное имя, описание)

1 Ответ

2 голосов
/ 03 октября 2011

То, что вы ограничиваете, это свойства, которые будут доступны / заполнены в ваших SearchResult объектах - к которым вы можете получить доступ непосредственно в цикле foreach:

DirectoryEntry baseEntry = new DirectoryEntry(rootPath, null, null, AuthenticationTypes.FastBind);

DirectorySearcher groupSearcher = new DirectorySearcher(baseEntry);
groupSearcher.Filter = "(objectClass=group)";

groupSearcher.PropertiesToLoad.Add("distinguishedName");
groupSearcher.PropertiesToLoad.Add("description");

foreach (SearchResult groupSr in groupSearcher.FindAll())
{
   if(groupSr.Properties["description"] != null && groupSr.Properties["description"].Count > 0)
   {
      string description = groupSr.Properties["description"][0].ToString();
   }

  .....
} 

Вы не можете ограничить свойства действительного DirectoryEntry - поэтому, если вы возьмете запись каталога для каждого SearchResult - у вас будет полный доступ ко всему. Но суть в том, что вы можете определить, какие свойства вам нужны, и получить к ним доступ напрямую на SearchResult, без необходимости возвращаться к базовому DirectoryEntry

...