Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Sharepoint UserProfileManager без права управления профилями пользователей

Автор вопроса: Michael StumОтветов: 4

У меня есть проблема, которая немного сводит меня с ума: использование 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 Identity. WindowsIdentity.GetCurrent (). Name возвращает "NT AUTHORITY \ network service", и я дал этой учетной записи права на управление профилями пользователей - безуспешно.

site.RootWeb.CurrentUser.LoginName возвращает SHAREPOINT \ system для сайта, созданного в RunWithElevatedPrivileges, который не является действительной учетной записью Windows ofc.

Есть ли вообще способ сделать это? Я не хочу давать всем пользователям права "Управление профилями пользователей", я просто хочу получить некоторые данные из профилей пользователей (отдел, страна, прямые отчеты). Любые идеи?

sharepoint

Ответы

Ответ 1 · рейтинг 4 · senfo

Разрешение, которое необходимо установить, фактически находится в Поставщике общих услуг.

  1. Перейдите в Central Admin
  2. Перейдите к поставщику общих услуг
  3. В разделе Профили пользователей и Мои сайты перейдите к разрешениям служб персонализации.
  4. Если учетная запись еще не существует, добавьте учетную запись, под которой работает домен приложения вашего сайта.
  5. Предоставьте этому пользователю разрешение Управление профилями пользователей.

Я заметил, что вы запускаете пул приложений под учетной записью сетевой службы. Я реализовал идентичную функцию на своем сайте; однако пул приложений размещался под учетной записью Windows. Однако я не уверен, почему это имеет значение.

Ответ 2 · рейтинг 2 · Jan Tielens

На самом деле мне удалось добиться этого двумя способами:

  1. Поместите код, использующий UserProfileManager, за слой веб-сервисов. Веб-служба должна использовать удостоверение пула приложений, у которого есть доступ к службам профилей пользователей.
  2. Используйте технику выдачи себя за другое лицо, описанную в следующей статье: http://www.dotnetjunkies.com/WebLog/victorv/archive/2005/06/30/128890.aspx

Ответ 3 · рейтинг 2 · Michael Stum

Спасибо за ответы. Одно предостережение: если вы запустите пул приложений как "Сетевая служба" вместо учетной записи домена, вы облажались.

Но опять же, рекомендуется в любом случае использовать учетную запись домена (на тестовом сервере я использовал сетевую службу, но после изменения ее на учетную запись домена все заработало).

Ответ 4 · рейтинг 1 · Community

Вот ответ. Это глупая ошибка Microsoft, и есть исправление. Скачаю сейчас, чтобы протестировать.

http://support.microsoft.com/kb/952294/en-us

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы