หากคุณใช้. NET 3.5 ขึ้นไปคุณสามารถใช้System.DirectoryServices.AccountManagement
เนมสเปซ (S.DS.AM) ใหม่ซึ่งทำให้ง่ายกว่าที่เคยเป็นมาก
อ่านทั้งหมดได้ที่นี่: การจัดการหลักการรักษาความปลอดภัยของไดเรกทอรีใน. NET Framework 3.5
อัปเดต:บทความในนิตยสาร MSDN ที่เก่ากว่าไม่ได้ออนไลน์อีกต่อไปน่าเสียดายที่คุณต้องดาวน์โหลด CHM สำหรับนิตยสาร MSDN มกราคม 2008จาก Microsoft และอ่านบทความในนั้น
โดยพื้นฐานแล้วคุณต้องมี "บริบทหลัก" (โดยทั่วไปคือโดเมนของคุณ) ผู้ใช้หลักจากนั้นคุณจะได้รับกลุ่มได้อย่างง่ายดาย:
public List<GroupPrincipal> GetGroups(string userName)
{
List<GroupPrincipal> result = new List<GroupPrincipal>();
// establish domain context
PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain);
// find your user
UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName);
// if found - grab its groups
if(user != null)
{
PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups();
// iterate over all groups
foreach(Principal p in groups)
{
// make sure to add only group principals
if(p is GroupPrincipal)
{
result.Add((GroupPrincipal)p);
}
}
}
return result;
}
และนั่นคือทั้งหมดที่มี! ตอนนี้คุณมีผลลัพธ์ (รายการ) ของกลุ่มการอนุญาตที่ผู้ใช้เป็นสมาชิกอยู่แล้ว - ทำซ้ำพิมพ์ชื่อของพวกเขาหรืออะไรก็ตามที่คุณต้องทำ
อัปเดต:ในการเข้าถึงคุณสมบัติบางอย่างซึ่งไม่ปรากฏบนUserPrincipal
วัตถุคุณต้องเจาะลึกถึงสิ่งที่อยู่ข้างใต้DirectoryEntry
:
public string GetDepartment(Principal principal)
{
string result = string.Empty;
DirectoryEntry de = (principal.GetUnderlyingObject() as DirectoryEntry);
if (de != null)
{
if (de.Properties.Contains("department"))
{
result = de.Properties["department"][0].ToString();
}
}
return result;
}
อัปเดต # 2:ดูเหมือนว่าไม่ควรจะยากเกินไปที่จะรวบรวมข้อมูลโค้ดทั้งสองนี้เข้าด้วยกัน .... แต่โอเค - นี่คือ:
public string GetDepartment(string username)
{
string result = string.Empty;
// if you do repeated domain access, you might want to do this *once* outside this method,
// and pass it in as a second parameter!
PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain);
// find the user
UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, username);
// if user is found
if(user != null)
{
// get DirectoryEntry underlying it
DirectoryEntry de = (user.GetUnderlyingObject() as DirectoryEntry);
if (de != null)
{
if (de.Properties.Contains("department"))
{
result = de.Properties["department"][0].ToString();
}
}
}
return result;
}
UserPrincipal
- ดูคำตอบที่อัปเดตของฉันสำหรับวิธีการรับ