SharePoint 2007 - Come inserire dati all'interno di una lista senza averne i privilegi

Può capitare, ad esempio nello sviluppo di una WebPart, che si abbia la necessità di inserire dei dati all’interno di una lista SharePoint senza che l’utente che sta eseguendo la WebPart abbia alcun diritto su quella lista.

Con SharePoint 2007 abbiamo a disposizione il comando RunWithElevatedPrivileges che ci permette di eseguire del codice con l’identità dell’utente SHAREPOINT\System account, tuttavia, oltre a tutte le considerazioni in materia di sicurezza dobbiamo prendere alcuni accorgimenti per far funzionare il nostro codice:

·         Dopo aver elvevato i privilegi dovremmo istanziare nuovamente le classi SPSite ed SPWeb senza poter utilizzare quelle disponibili nel context in quanto quelle sono create nel context dell’utente corrente.

·         E’ necessario impostare a true le proprietà AllowUnsafeUpdates altrimenti saremo in grado di leggere i dati dalla lista, ma non saremmo comunque in grado di aggiornarli.

·         E’ preferibile utilizzare gli statements using per le classi SPSite ed SPWeb istanziate per essere sicuri che il metodo Dispose sia sempre chiamato.

·         Siccome l’utente che esegue l’operazione è un utente di sistema, perderemo l’informazione dell’utente che ha effettuato l’operazione; è quindi buona norma memorizzare l’utente corrente prima di elevare i privilegi e memorizzarlo in un’apposito campo all’interno della lista.

Il codice che ne deriva è il seguente:

 

SPSite site = SPControl.GetContextWeb(this.Context).Site;

SPWeb web = SPControl.GetContextWeb(this.Context);

SPUser curUser = web.AllUsers[System.Security.Principal.WindowsIdentity.GetCurrent().Name];

SPSecurity.RunWithElevatedPrivileges(delegate()

{

      using (SPSite elevatedSite = new SPSite(site.ID))

      {

            using (SPWeb elevatedWeb = elevatedSite.OpenWeb(web.ID))

            {

                  if (elevatedWeb != null)

                  {

                        elevatedSite.AllowUnsafeUpdates = true;

                        elevatedWeb.AllowUnsafeUpdates = true;

 

                        SPList list = elevatedWeb.Lists["Mia Lista"];

                        if (list != null)

                        {

                              SPListItem item = list.Items.Add();

                              item["Titolo"] = "Risposta di " + curUser.Name;

                              item["Utente Corrente"] = curUser;

                              item.Update();

                        }

                  }

            }

      }

});

 

 

Technorati Tags: ,

posted @ mercoledì 7 novembre 2007 23:07

Print
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011