موفر الملف الشخصي:استرداد قائمة بجميع الملفات الشخصية

StackOverflow https://stackoverflow.com/questions/1404381

سؤال

أقوم بتطوير موقع ويب 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);        
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top