Π ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΡ Ρ ΠΎΡΠΈΠΌ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ Wrox Press, Π³Π΄Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ description ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Author.
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΡ ΡΠΎΠ΅Π΄ΠΈΠ½ΡΠ΅ΠΌΡΡ Ρ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡΠ΅ΠΉ Wrox Press. ΠΠ΄Π΅ΡΡ Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ ΠΏΠΎΠΈΡΠΊ. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡ DirectorySearcher, Π³Π΄Π΅ Π·Π°Π΄Π°Π½ SearchRoot. Π€ΠΈΠ»ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ (&(objectClass=user)(description=Auth*)) Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΌΡ Π½Π°ΡΠ»ΠΈ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° user, Π³Π΄Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ description Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Auth, Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅. ΠΠ±Π»Π°ΡΡΡ ΠΏΠΎΠΈΡΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠ΅Π²ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠΈΡΠΊ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΠ» Π² ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅ΠΌΡΡ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ Π΄Π»Ρ Wrox Press:
DirectoryEntry de new DirectoryEntry();
de.Path = "LDAP://OU=Wrox Press, " + "DC=eichkogelstrasse, DC=local";
DirectorySearcher searcher = new DirectorySearcher();
searcher.SearchRoot = de;
searcher.Filter = "(&(objectClass=user)(description=Auth*))";
searcher.SearchScope = SearchScope.Subtree;
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ° ΠΌΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° name, description, givenName, ΠΈ wWWHomePage.
searcher.PropertiesToLoad.Add("name");
searcher.PropertiesToLoad.Add("description");
searcher. PropertiesToLoad.Add("givenName");
searcher.PropertiesToLoad.Add("wWWHomePage");
ΠΡ Π³ΠΎΡΠΎΠ²Ρ Π½Π°ΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊ. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ. DirectorySearcher ΠΈΠΌΠ΅Π΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Sort, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ SortOption. ΠΠ΅ΡΠ²ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° SortOption ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°, Π²ΡΠΎΡΠΎΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ SortDirection ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Ascending ΠΈ Descending.
Π§ΡΠΎΠ±Ρ Π½Π°ΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊ, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ FindOne() Π΄Π»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈΠ»ΠΈ FindAll(), ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ. FindOne() Π²Π΅ΡΠ½Π΅Ρ ΠΏΡΠΎΡΡΠΎΠΉ SearchResult, FindAll() Π²Π΅ΡΠ½Π΅Ρ SearchResultCollection. ΠΡ Ρ ΠΎΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ΅Ρ Π°Π²ΡΠΎΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ FindAll():
searcher.Sort = new SortOption("givenName", SortDirection.Ascending);
SearchResultCollection Results = searcher.FindAll();
Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠΈΠΊΠ»Π° foreach ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ SearchResult Π² SearchResultCollection. SearchResult ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΊΡΡΠ΅ ΠΏΠΎΠΈΡΠΊΠ°. Π‘Π²ΠΎΠΉΡΡΠ²ΠΎ Properties Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ResultPropertyCollection, Π³Π΄Π΅ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΈ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ.
SearchResultCollection results = Searcher.FindAll();
foreach (SearchResult result in results) {
ResutPropertyCollection props = result.Properties;
foreach (string propName in props.PropertyNames) {
Console.Write(propName + ": ");
Console.WriteLine(props[propName][0]);
}
Console.WriteLine();
}
}
ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²Π΅ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΡΠ»Π΅ ΠΏΠΎΠΈΡΠΊΠ°, ΡΠΎ ΡΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°. SearchResult ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ GetDirectoryEntry(), ΠΊΠΎΡΠΎΡΡΠΉ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ Π·Π°ΠΏΠΈΡΡ DirectoryEntry Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
Π Π΅Π·ΡΠ»ΡΡΠΈΡΡΡΡΠΈΠΉ Π²ΡΠ²ΠΎΠ΄ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π°ΡΠ°Π»Π΅ ΡΠΏΠΈΡΠΊΠ° Π²ΡΠ΅Ρ Π°Π²ΡΠΎΡΠΎΠ² ΠΊΠ½ΠΈΠ³ΠΈ Professional C# Ρ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ
ΠΠΎΠΈΡΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ·Π΄Π°Π½ΠΎ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅, ΡΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Windows Forms. Π‘ Π΅Π³ΠΎ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π΄ΠΎΠΌΠ΅Π½Π° Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ ΡΠΈΠ»ΡΡΡΠ°. ΠΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ Π·Π°Π΄Π°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ.
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°Π³ΠΈ, ΠΏΠΎΠΌΠΎΠ³Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
1. ΠΠ° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π³Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π΄ΠΎΠΌΠ΅Π½Π°. ΠΡΡ ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ. ΠΡΠ»ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅Ρ Π΄ΠΎΠΌΠ΅Π½Π° Π½Π΅ Π²Π²ΠΎΠ΄ΠΈΡΡΡ, ΡΠΎ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π΅Π· ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΠ»ΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
2. Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π²ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ²ΠΎΠΉΡΡΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠ° User ΠΌΠΎΠ³ΡΡ Π·Π°Π³ΡΡΠΆΠ°ΡΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ Π² ΠΎΠΊΠ½ΠΎ ΡΠΏΠΈΡΠΊΠ° ListBoxProperties.
3. ΠΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈΠΌΠ΅Π½ ΡΠ²ΠΎΠΉΡΡΠ², ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡΡ. Π Π΅ΠΆΠΈΠΌ SelectionMode ΠΎΠΊΠ½Π° ΡΠΏΠΈΡΠΊΠ° Π·Π°Π΄Π°Ρ ΠΊΠ°ΠΊ MultiSimple.
4. ΠΠΎΠΆΠ½ΠΎ Π²Π²Π΅ΡΡΠΈ ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎΠΈΡΠΊΠ°. ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π·Π°Π΄Π°Π΅ΡΡΡ Π² ΡΡΠΎΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ½Π΅, ΠΈΡΠ΅Ρ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ: (objectClass=user).
5. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ°ΡΡ ΠΏΠΎΠΈΡΠΊ.
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΡΡ Π΅ΠΌΡ
ΠΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΠΌΠ΅ΡΠΎΠ΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΎΠ±ΡΡΠΈΠΉ: ΠΏΠ΅ΡΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ β ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈ Π²ΡΠΎΡΠΎΠΉ β Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΎΠΈΡΠΊΠ° Π² Π΄ΠΎΠΌΠ΅Π½Π΅. Π ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΌΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΈΡΡΠ²Π°Π΅ΠΌ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠ° User ΠΈΠ· ΡΡ Π΅ΠΌΡ Π΄Π»Ρ Π²ΡΠ²ΠΎΠ΄Π° Π΅Π³ΠΎ Π² ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π ΠΌΠ΅ΡΠΎΠ΄Π΅-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ buttonLoadProperties_Click() Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠ΅ΡΠΎΠ΄Π° SetLogonInformation() ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΠ°ΡΠΎΠ»Ρ ΠΈ ΠΈΠΌΡ Ρ ΠΎΡΡΠ° ΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π΄ΠΈΠ°Π»ΠΎΠ³Π° ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ Π² ΡΠ»Π΅Π½Π°Ρ ΠΊΠ»Π°ΡΡΠ°. ΠΠ°ΡΠ΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ SetNamingContext() Π·Π°Π΄Π°Π΅Ρ ΠΈΠΌΡ LDAP ΡΡ Π΅ΠΌΡ ΠΈ ΠΈΠΌΡ LDAP ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. ΠΠΌΡ LDAP ΡΡΠΎΠΉ ΡΡ Π΅ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Π²ΡΠ·ΠΎΠ²Π΅ SetUserProperties() Π΄Π»Ρ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² Π² ΠΎΠΊΠ½Π΅ ΡΠΏΠΈΡΠΊΠ°:
private void buttonLoadProperties_Click(object sender, System.EventArgs e) {
try {
SetLogonInformation();
SetNamingContext();
SetUserProperties(schemaNamingContext);
} catch (Exception ex) {
MessageBox.Show("Cheek your inputs! " + ex.Message);
}
}
protected void SetLogonInformation() {
username =
(textBoxUsername.Text == "" ? null :
textBoxUsername.Text);
password =
(textBoxPassword.Text == "" ? null :
textBoxPassword.Text);
hostname = textBoxHostname.Text;
if (hostname ! = "") hostname += "/";
}
ΠΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ SetNamingContext() ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΠΊΠΎΡΠ΅Π½Ρ Π΄Π΅ΡΠ΅Π²Π° ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ² ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ Π΄Π²ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²: SchemaNamingContext.
protected string SetNamingContext() {
using (DirectoryEntry de = new DirectoryEntry()) {
string path = "LDAP://" + hostname + "/rootDSE";
de.Username = username;
de.Password = password;
de.Path = path;
schemaNamingContext =
de.Properties["schemaNamingContext"][0].ToString();
defaultNamingContext =
de.Properties["defaultNamingContext"][0].ToString();
}
}
ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ ΡΠ²ΠΎΠΉΡΡΠ² ΠΊΠ»Π°ΡΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
Π£ Π½Π°Ρ Π΅ΡΡΡ ΠΈΠΌΡ 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.
ΠΠΎΠΈΡΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² User
ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ FillResult():
private void buttonSearch_Click(object render, System.EventArgs e) {
try {
FillResult();
} catch (Exception ex) {
MessageBox.Show("Check your input: " + ex.Message)
}
}
Π ΠΌΠ΅ΡΠΎΠ΄Π΅ FillResult() Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ Π² ΠΏΠΎΠ»Π½ΠΎΠΌ Π΄ΠΎΠΌΠ΅Π½Π΅ Π°ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°, ΠΊΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΠ°Π½ΡΡΠ΅. SearchScope Π·Π°Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Subtree, Filter Π΄Π»Ρ ΡΡΡΠΎΠΊΠΈ ΠΌΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ· TextBox, Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°Π³ΡΡΠΆΠ΅Π½Ρ Π² ΠΊΡΡ, Π·Π°Π΄Π°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±ΠΈΡΠ°Π΅Ρ Π² ΠΎΠΊΠ½Π΅ ΡΠΏΠΈΡΠΊΠ°