SharePoint 2010 Изменить контекст для RunWithElevatedPrivileges - PullRequest
1 голос
/ 14 декабря 2011

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

Поскольку учетные записи на уровне пользователя вообще не имеют доступа к сайту 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.

Ответы [ 2 ]

4 голосов
/ 14 декабря 2011

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

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

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

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

2 голосов
/ 14 декабря 2011

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

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

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