Finalmente sono stati capiti i motivi per cui il metodo RunWithElevatedPrivileges della classe SPSecurity a volte smetteva di funzionare. Viene svelato tutto in questo post:
http://moldenco.blogspot.com/2007/05/spsecurityrunwithelevatedprivileges-to.html
In pratica, per usufruire del corretto funzionamento di tale metodo, bisogna:
- creare sempre dei nuovi oggetti di tipo SPSite o SPWeb, senza prenderli dal contesto (per esempio attraverso i metodi GetContextSite o GetContextWeb della classe SPControl)
- settare sempre a true la proprietà AllowUnsafeUpdates della classe SPWeb.
public void QualsiasiCosa()
{
//... SPSecurity.RunWithElevatedPrivileges(mioMetodo);
}
public void mioMetodo()
{
SPSite site = new SPSite("http://localhost");
SPWeb web = site.AllWebs["NomeDelSito"];
using(web)
{
site.AllowUnsafeUpdates = true;
//codice eseguito con privilegi da admin
site.AllowUnsafeUpdates = false;
}
}