Sharepoint UserProfileManager без права управления профилями пользователей - PullRequest
4 голосов
/ 17 сентября 2008

У меня проблема, которая сводит меня с ума: использование 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.

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

Ответы [ 4 ]

4 голосов
/ 17 сентября 2008

Требуемое разрешение на самом деле найдено в поставщике общих служб.

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

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

2 голосов
/ 02 октября 2008

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

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

2 голосов
/ 02 октября 2008

Есть два способа, которыми я действительно смог сделать это:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...