ProfileProvider:すべてのプロファイルのリストを取得します
-
05-07-2019 - |
質問
ActiveDirectoryMembershipProviderとSqlProfileProviderを使用してasp.netイントラネットWebサイトを開発しています。
私のウェブサイトの要件の1つは、「誕生日」を持つことです。すべてのプロファイルを一覧表示し、そこから誕生日情報を取得する必要があります。
次のように問題に取り組みました:
- Membership.GetAllUsers()静的メソッドを呼び出します。
- ユーザーのリストを反復処理し、メンバーのユーザー名からプロファイルを取得します
ただし、このアプローチは次の理由で失敗しました。
- webappは現在のログに記録されているユーザーになりすましてADの詳細を取得しているため(web.configのidentity impersonate =" true")、例外が発生します" access is denied" GetAllUsersを呼び出そうとしたとき
- webappにスーパーユーザーアカウントを偽装させようとすると、ADはユーザー名をusername @ domain-name形式で返しますが、プロファイルプロバイダーでは最初はdomain-name \ username形式として保存されていました。
では、この問題をどのように回避して、組織のメンバーのプロファイルのリスト全体を取得しますか?
解決 2
GetAllProfiles()メソッドを持つProfileManagerがあります:
http://msdn.microsoft .com / en-us / library / system.web.profile.profilemanager.getallprofiles.aspx
他のヒント
これまでやったことはありませんが、確立されたときに 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