Вопрос

Я разрабатываю веб-сайт интрасети asp.net с ActiveDirectoryMembershipProvider и SqlProfileProvider.

Одним из требований моего веб-сайта является наличие страницы «Дни рождения», на которой мне потребуется перечислить все профили и получить из нее информацию о днях рождения.

Я подошел к проблеме следующим образом:

  • Вызовите статический метод Membership.GetAllUsers();
  • Перебрать список пользователей и получить профиль по имени пользователя участника.

Однако этот подход потерпел неудачу по следующим причинам:

  • Веб-приложение выдает себя за текущего зарегистрированного пользователя, чтобы получить его данные AD (identity impersonate="true" в файле web.config), поэтому при попытке вызвать GetAllUsers я получаю исключение «доступ запрещен».
  • Если я попытаюсь заставить веб-приложение выдать себя за учетную запись суперпользователя, AD вернет имена пользователей в формате имя пользователя@имя домена, но в моем поставщике профилей они изначально хранились в формате имя домена\имя пользователя.

Итак, как бы вы обошли эту проблему и получили весь список профилей любого члена организации?

Это было полезно?

Решение 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