ProfileProvider:检索所有配置文件的列表

时间:2009-09-10 09:59:44

标签: asp.net security membership profile

我正在开发一个带有ActiveDirectoryMembershipProvider和SqlProfileProvider的asp.net Intranet网站。

我的网站的一个要求是有一个“生日”页面,这需要我列出所有个人资料并从中检索生日信息。

我解决了以下问题:

  • 调用Membership.GetAllUsers()静态方法;
  • 遍历用户列表并从成员的用户名
  • 中检索配置文件

然而,由于以下原因,这种方法失败了:

  • webapp模仿当前登录用户检索其AD详细信息(web.config中的身份impersonate =“true”),因此在尝试调用GetAllUsers时出现“访问被拒绝”的异常
  • 如果我尝试让webapp模拟超级用户帐户,则AD会将用户名返回为username @ domain-name格式,但在我的个人资料提供程序中,它们最初存储为域名\用户名格式。

那么,您如何解决此问题以检索组织中任何成员的完整配置文件列表?

3 个答案:

答案 0 :(得分:2)

虽然我之前从未这样做过,但您可以尝试创建辅助模拟上下文,在建立后,对GetAllUsers的调用应该会成功。

看一下http://chiragrdarji.blogspot.com/2007/03/impersonation-using-code.html,通过使用System.Security.Principal.WindowsIdentity类和System.Security.Principal.WindowsImpersonationContext,这个章节似乎已经实现了安全上下文的更改。可能值得一试。

答案 1 :(得分:2)

有一个带有方法GetAllProfiles()的ProfileManager:

http://msdn.microsoft.com/en-us/library/system.web.profile.profilemanager.getallprofiles.aspx

答案 2 :(得分:1)

ProfileInfoCollection profiles = ProfileManager.GetAllProfiles(ProfileAuthenticationOption.All);
foreach (ProfileInfo pi in profiles)
{
    ProfileCommon p = Profile.GetProfile(pi.UserName);
    countries.Add(p.Country);        
}