У меня проблема, которая сводит меня с ума: использование UserProfileManager в качестве неавторизованного пользователя.
Проблема: у пользователя нет прав «Управление профилями пользователей», но я все еще хочу использовать UserProfileManager. Идея использования SPSecurity.RunWithElevatedPrivileges, похоже, не работает, поскольку UserProfileManager авторизуется против SSP, как кажется.
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(inputWeb.Site.ID))
{
ServerContext ctx = ServerContext.GetContext(site);
UserProfileManager upm = new UserProfileManager(ctx,true);
UserProfile u = upm.GetUserProfile(userLogin);
DepartmentName = u["Department"].Value as string;
}
});
По-прежнему происходит сбой в строке «новый UserProfileManager» с исключением «У вас должны быть права администратора для управления профилями пользователей, чтобы использовать режим администратора».
Насколько я понял, RunWithElevatedPrivileges возвращается к идентификатору AppPool. WindowsIdentity.GetCurrent (). Name возвращает «NT AUTHORITY \ network service», и я предоставил этой учетной записи права на управление профилями пользователей - не повезло.
site.RootWeb.CurrentUser.LoginName возвращает SHAREPOINT \ system для сайта, созданного в RunWithElevatedPrivileges, который не является действительной учетной записью Windows ofc.
Есть ли способ сделать это? Я не хочу предоставлять всем пользователям права «Управление профилями пользователей», но я просто хочу получить некоторые данные из профилей пользователей (отдел, страна, прямые отчеты). Есть идеи?