Un esempio di come eseguire del codice con elevati privilegi in SharePoint 2007 (WSS3 - MOSS).

L'importante è non usare gli oggetti restituiti dal contesto in quando vengono eseguiti con i privilegi dell'utente corrente, vanno sempre creati nuovi oggetti all'interno del metodo SPSecurity.RunWithElevatedPrivileges.

C#

//using Microsoft.SharePoint;
//using Microsoft.SharePoint.Utilities;

//recupero il web corrente, in questo caso dal contesto
string urlContext = SPContext.Current.Web.Url;

//elevo i privilegi
SPSecurity.RunWithElevatedPrivileges(delegate(){
//per impersonate, creo nuovi oggetti
    using (SPSite site = new SPSite(urlContext))
    {
        using (SPWeb web = site.OpenWeb())
        {
            bool allowUnsafe = web.AllowUnsafeUpdates;
            web.AllowUnsafeUpdates = true;
            try
            {
                //il codice da eseguire con 
                //elevati privilegi ovvero
                //l'utente dell'application pool
                //SHAREPOINT\system
            }
            catch (Exception ex)
            {
            }
            finally
            {
                web.AllowUnsafeUpdates = allowUnsafe;
            }
        }
    }
});
Il codice è eseguito con i privilegi dell'utente configurato nell'application pool della WebApplication.

Vedi anche Eseguire il codice con elevati privilegi 2

Il precedente esempio era questo ma non funzionava correttamente in caso di web application estese in quanto creava gli oggetti sempre sulla zona di default:

C#

//using Microsoft.SharePoint;
//using Microsoft.SharePoint.Utilities;

//recupero il web corrente, in questo caso dal contesto
SPWeb webCurrent = SPContext.Current.Web;

//elevo i privilegi
SPSecurity.RunWithElevatedPrivileges(delegate(){
//per impersonate, creo nuovi oggetti
    using (SPSite site = new SPSite(webCurrent.Site.ID))
    {
        using (SPWeb web = new SPWeb(webCurrent.ID))
        {
            bool allowUnsafe = web.AllowUnsafeUpdates;
            web.AllowUnsafeUpdates = true;
            try
            {
                //il codice da eseguire con 
                //elevati privilegi ovvero
                //l'utente dell'application pool
                //SHAREPOINT\system
            }
            catch (Exception ex)
            {
            }
            finally
            {
                web.AllowUnsafeUpdates = allowUnsafe;
            }
        }
    }
});
Questo vuol dire che se avevo la zona di default su http://mioserver e la zona intranet su http://sp.sgart.it , collegandomi da internet, tutti gli oggetti venivano creati sulla zona default, è quindi tutti i link (web, liste e item) puntavano ad http://mioserver e non su http://sp.sgart.it .
Tags:
SharePoint498 SharePoint 2007218
Potrebbe interessarti anche: