SPSecurity.RunWithElevatedPrivilieges () выполнит ваш код как системную учетную запись, то есть учетную запись, под которой запускается пул приложений, что может или не может быть тем, что вы хотите сделать.Например, если к списку прикреплен рабочий процесс, который должен запускаться при добавлении в список новых элементов, он не сработает, если вы добавите новый элемент списка под учетными данными системной учетной записи (это было исправление безопасностивведено в SharePoint 2007 SP 1).В этом случае вам придется выполнить операцию вставки под другой учетной записью, которая имеет правильные разрешения в списке.
Вы можете получить UserToken для любого пользователя, используя следующий код:
SPUserToken userToken = null;
SPSecurity.RunWithElevatedPrivileges(() =>
{
using (SPSite site = new SPSite(SPContext.Current.Site.ID))
{
using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
{
userToken = web.AllUsers["domain\\username"].UserToken;
}
}
});
Замените «домен \ имя пользователя» на правильное имя учетной записи Windows.Затем вы можете передать этот пользовательский токен одной из перегрузок конструктора объекта SPSite, чтобы выполнить код с учетными данными этого пользователя, например:
using (SPSite site = new SPSite(SPContext.Current.Site.ID, userToken))
{
using (SPWeb web = site.OpenWeb(SPContext.Current.Web.ID))
{
// This code will execute under the credentials of the userToken user
}
}
Надеюсь, это поможет.