Сейчас я использую метод SPSecurity.RunWithElevatedPrivileges, чтобы позволить анонимным пользователям добавлять элементы списка в список. То, что я хотел бы сделать, это сделать общий метод, который принимает в качестве аргумента объект «Сайт», «Список» и «Список» и добавляет этот элемент в передаваемый список. Прямо сейчас у меня есть:
public static void AddItemElevated(Guid siteID, SPListItem item, SPList list)
{
SPSite mySite = SPContext.Current.Site;
SPList myList = WPToolKit.GetSPList(mySite, listPath);
SPWeb myWeb = myList.ParentWeb;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite eleSite = new SPSite(mySite.ID))
{
using (SPWeb eleWeb = eleSite.OpenWeb(myWeb.ID))
{
eleWeb.AllowUnsafeUpdates = true;
SPList eleList = eleWeb.Lists[myList.Title];
SPListItem itemToAdd = list.Items.Add();
itemToAdd = item;
itemToAdd.Update();
eleWeb.AllowUnsafeUpdates = false;
}
}
});
}
Проблема в том, что «item» инициализируется за пределами повышенных привилегий, поэтому, когда для «itemToAdd» установлено значение «item», он теряет свои повышенные привилегии, что приводит к сбою кода в «item.update ()», если используется my непривилегированный пользователь.
Есть мысли?