Профильпровайдер:получить список всех профилей
-
05-07-2019 - |
Вопрос
Я разрабатываю веб-сайт интрасети 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);
}