.NET 3.5 이상을 사용하는 경우 새 System.DirectoryServices.AccountManagement
(S.DS.AM) 네임 스페이스를 사용하면 이전보다 훨씬 쉽게 만들 수 있습니다.
여기에서 모든 내용을 읽어보십시오 . .NET Framework 3.5에서 디렉터리 보안 주체 관리
업데이트 : 이전 MSDN 잡지 기사가 더 이상 온라인 상태가 아닙니다. 안타깝게도 Microsoft에서 2008 년 1 월 MSDN 잡지 CHM 을 다운로드하고 그 기사를 읽어야합니다.
기본적으로 "주요 컨텍스트"(일반적으로 도메인), 사용자 주체가 있어야하며 그룹을 매우 쉽게 얻을 수 있습니다.
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
. 액세스 방법은 업데이트 된 답변을 참조하세요.