2009-09-10 17 views
2

我正在开发一个ActiveDirectoryMembershipProvider和SqlProfileProvider的asp.net intranet网站。ProfileProvider:检索所有配置文件的列表

我的网站的一个要求是有一个“生日”页面,这将需要我列出所有配置文件并从中检索生日信息。

我走近问题如下:

  • 调用Membership.GetAllUsers()静态方法;
  • 迭代通过用户的列表,并检索从会员的用户名

这种方法的轮廓,然而,失败的原因如下:

  • web应用程序正在模拟当前登录用户检索其AD详细信息(身份impersonate =“true”在web.config中),所以当我试图调用GetAllUsers时出现异常“访问被拒绝”如果我试图让webapp模拟一个超级用户帐户那么AD将用户名作为username @ domain-name返回格式,但在我的配置文件提供程序中,它们最初以域名\用户名格式存储。

那么,你将如何解决这个问题来检索组织的任何成员的配置文件的整个列表?

回答

2

虽然我以前从未做过,但可以尝试创建第二个模拟上下文,该模拟在建立时调用GetAllUsers应成功。

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

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