SharePoint 2010 Изменить контекст для RunWithElevatedPrivileges

У меня есть 2 коллекции сайтов, давайте просто назовем их A и B. В A у меня есть список некоторого контента, который я хочу синхронизировать между несколькими семействами сайтов. Я создал настраиваемую веб-часть запроса контента, которая запрашивает данные, но я наткнулся на препятствие.

Поскольку учетные записи уровня пользователя вообще не имеют доступа к сайту A, и я не хочу, чтобы они имели доступ к этому сайту на любом уровне, я получаю сообщение об ошибке отказа в доступе, когда моя веб-часть работает на сайте B. способ изменить контекст, в котором работает RunWithElevatedPrivileges?

Мой текущий код, который запускается из семейства сайтов B, выглядит так:

ClientContext clientContext = new ClientContext(siteAUrl);
SP.List oList = clientContext.Web.Lists.GetByTitle(listName);

CamlQuery query = new CamlQuery();
//Add View, Execute Query, etc.

return results;

Если я заключу это в SPSecurity.RunWithElevatedPrivileges, он будет работать с повышенными правами в контексте B семейства сайтов, тогда как я бы предпочел, чтобы он работал в контексте A семейства сайтов.


person Matt Klepeis    schedule 13.12.2011    source источник


Ответы (2)


Клиентская объектная модель SharePoint 2010 не поддерживает SPSecurity.RunWithElevatedPrivileges. Как заявляет @Nat, этот вызов возвращает идентификатор потока учетной записи пула приложений (SystemAccount). Поскольку ваш код запускается на клиенте, идентификатор не может быть возвращен учетной записи пула приложений. Запуск кода в качестве системной учетной записи через клиентскую объектную модель может открыть брешь в безопасности. Каждый мог писать и выполнять код как администратор.

Если ваш код работает на сервере, вы можете использовать SPUserToken.SystemAccount, чтобы открыть SPSite с учетными данными системной учетной записи:

using (SPSite site = new SPSite("http://someurl", SPUserToken.SystemAccount))
{
  // admin action here
}

Посмотрите мою запись в блоге Как открыть сайт SPS с учетными данными системной учетной записи для получения дополнительной информации.

person Stefan    schedule 14.12.2011

Помните, что SPSecurity.RunWithElevatedPrivileges запускает код в контексте sercurity учетной записи пула приложений. Таким образом, если вы не запускаете семейства сайтов в разных веб-приложениях, они будут иметь одинаковый контекст. т.е. хозяин всего, что исследуется.

Если вы работаете с разными семействами сайтов, учетная запись пула приложений будет определять разрешения для другого веб-приложения.

person Nat    schedule 14.12.2011