Chi di voi già lavora tramite il modello ad oggetti di SharePoint saprà sicuramente che, tramite un metodo di una specifica classe di tale modello, abbiamo la possibilità di eseguire una particolare porzione di codice (quindi delle azioni vere e proprie sui contenuti di SharePoint) tramite i privilegi dell'utente di sistema. Privilegi che ci danno la possibilità di fare un pò quello che vogliamo sui contenuti, bypassando quindi il controllo sui privilegi dell'utente corrente.
namespace D4S.SharePoint.Core.SPExtensions { public static class SPWebExtensions { public delegate void CodeToRunElevated(SPWeb elevatedWeb); public static void RunElevated(this SPWeb web, CodeToRunElevated secureCode) { string webUrl = web.Url; SPSecurity.RunWithElevatedPrivileges(() => { using (SPSite site = new SPSite(webUrl)) { try { site.AllowUnsafeUpdates = true; using (SPWeb elevatedWeb = site.OpenWeb()) { try { elevatedWeb.AllowUnsafeUpdates = true; secureCode(elevatedWeb); } finally { elevatedWeb.AllowUnsafeUpdates = false; } } } finally { site.AllowUnsafeUpdates = false; } } }); } } }
var currentWeb = SPContext.Current.Web; currentWeb.RunElevated(elevatedWeb => { //operazioni eseguite con privilegi elevati });