ProfileProvider : 모든 프로파일의 목록을 검색하십시오
-
05-07-2019 - |
문제
ActivedivedirectoryMembershipprovider와 SQLProfileProvider가있는 ASP.NET 인트라넷 웹 사이트를 개발 중입니다.
내 웹 사이트의 요구 사항 중 하나는 "생일"페이지를 갖는 것입니다.이 페이지는 모든 프로필을 나열하고 생일 정보를 검색해야합니다.
다음과 같이 문제에 접근했습니다.
- 멤버십을 호출하십시오 .getallusers () 정적 메소드;
- 사용자 목록을 통해 반복하고 멤버의 사용자 이름에서 프로필을 검색합니다.
그러나이 접근법은 다음과 같은 이유로 실패했습니다.
- WebApp은 현재 로그인 한 사용자를 가장하여 광고 세부 사항 (web.config에서 Idernity issersonate = "True")을 검색하고 있으므로 GetAllUsers를 호출하려고 할 때 "Access Is Donies"가 표시됩니다.
- WebApp이 Super User 계정을 가장하려는 경우 AD는 사용자 이름을 사용자 이름@domain-name 형식으로 반환하지만 내 프로필 제공 업체에서는 처음에 Domain-Name username 형식으로 저장되었습니다.
그렇다면이 문제를 해결하기 위해 어떻게 조직의 구성원에 대한 프로파일 목록을 검색 하시겠습니까?
해결책 2
a 메소드 getAllProfiles ()가있는 profileManager가 있습니다.
http://msdn.microsoft.com/en-us/library/system.web.profile.profilemanager.getallprofiles.aspx
다른 팁
전에는 한 번도 해본 적이 없지만, 당신은 2 차 사칭 컨텍스트를 만들려고 시도 할 수 있습니다. GetAllUsers
성공해야합니다.
살펴보십시오 http://chiragrdarji.blogspot.com/2007/03/impersonation-using-code.html,이 챕터는 사용하여 보안 컨텍스트의 변화를 달성 한 것으로 보입니다. System.Security.Principal.WindowsIdentity
함께 수업 System.Security.Principal.WindowsImpersonationContext
. 체크 아웃 할 가치가있을 수 있습니다.
ProfileInfoCollection profiles = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All);
foreach (ProfileInfo pi in profiles)
{
ProfileCommon p = Profile.GetProfile(pi.UserName);
countries.Add(p.Country);
}
제휴하지 않습니다 StackOverflow