Può capitare di dover aggiornare tramite codice, degli Item su cui l’utente corrente non ha privilegi di scrittura. SharePoint 3.0 ci viene in aiuto con il metodo SPSecurity.RunWithElevatedPrivileges che permette di effettuare esattamente quello di cui abbiamo bisogno.
Tutto sembra facile, ma se proviamo ad eseguire questo codice:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteURL))
{
using (SPWeb web = site.OpenWeb())
{
site.AllowUnsafeUpdates = true;
web.AllowUnsafeUpdates = true;
SPList list = web.Lists["Mia Lista"];
SPListItem item = list.GetItemById(2);
item["Titolo"] = "Nuovo titolo";
item.Update();
}
}
});
|
Otterremo la seguente eccezione: Operation is not valid due to the current state of the object.
Sembra che per qualche non meglio specificato motivo, non sia possibile chiamare il metodo Update della classe SPListItem all’interno di un blocco RunWithElevatedPrivileges.
Penso si tratti di un bug, comunque modificando un pochino il codice è possibile far funzionare il tutto:
SPWeb web = null;
try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(urlFolder))
{ web = site.OpenWeb(); }
});
web.AllowUnsafeUpdates = true;
SPList list = web.Lists["Mia Lista"];
SPListItem item = list.GetItemById(2);
item["Titolo"] = "Nuovo titolo";
item.Update();
}
finally
{
if (web != null)
web.Dispose();
}
|
Technorati Tags:
SharePoint,
.NET