موفر الملف الشخصي:استرداد قائمة بجميع الملفات الشخصية
-
05-07-2019 - |
سؤال
أقوم بتطوير موقع ويب asp.net إنترانت باستخدام ActiveDirectoryMembershipProvider وSqlProfileProvider.
أحد متطلبات موقع الويب الخاص بي هو أن يكون لدي صفحة "أعياد الميلاد"، الأمر الذي يتطلب مني إدراج جميع الملفات الشخصية واسترداد معلومات عيد الميلاد منها.
لقد تعاملت مع المشكلة على النحو التالي:
- استدعاء الأسلوب الثابت Membership.GetAllUsers();
- قم بالتكرار عبر قائمة المستخدمين واسترجاع ملف التعريف من اسم المستخدم الخاص بالعضو
إلا أن هذا النهج فشل للأسباب التالية:
- ينتحل تطبيق الويب شخصية المستخدم المسجل حاليًا لاسترداد تفاصيل الإعلان الخاصة به (انتحال الهوية = "true" في web.config)، لذلك أحصل على استثناء "تم رفض الوصول" عند محاولة استدعاء GetAllUsers
- إذا حاولت أن أجعل تطبيق الويب ينتحل شخصية حساب مستخدم متميز، فسيقوم AD بإرجاع أسماء المستخدمين بتنسيق username@domain-name، ولكن في موفر ملف التعريف الخاص بي، تم تخزينها في البداية بتنسيق اسم المجال/اسم المستخدم.
لذا، كيف يمكنك التغلب على هذه المشكلة لاسترداد القائمة الكاملة للملفات الشخصية لأي عضو في المنظمة؟
المحلول 2
يوجد ProfileManager بالطريقة GetAllProfiles ():
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);
}