Para el que sepa es muy sencillo, y posiblemente ya todo el mundo sepa, pero yo me acabo de enterar hoy. Se acabó la tiranía de las impersonaciones con administradores.
El secreto es abrir el SPWeb con los privilegios elevados y con el AllowUnsafeUpdates=true, por supuesto, luego hay que cerrarlo todo y guardarlo en su cajita, para cuando nos vuelva a hacer falta, más o menos así:
private static void CreaNuevoDocumento()
{
SPWeb sCurrentElevatedWeb = null;
SPSite sElevatedSite = null;
SPListItem sNuevoItem = null;
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
sElevatedSite = new SPSite(SPControl.GetContextSite(Context).ID);
sCurrentElevatedWeb = sElevatedSite.OpenWeb();
});
sCurrentElevatedWeb.AllowUnsafeUpdates = true;
sNuevoItem = CreateTempFile(sCurrentElevatedWeb);
sNuevoItem["Source"] = "Privilegios Elevados";
sNuevoItem["Id"] = "-1";
sNuevoItem.Update();
sCurrentElevatedWeb.AllowUnsafeUpdates = false;
sCurrentElevatedWeb.Dispose();
sElevatedSite.Dispose();
}
Quiero hacer hicapié en que mientras menos cosas hagamos dentro del delegate menos posibilidades tendremos de que se queje con el rollo del ERROR CODE -2130575251, por ejemplo los SPListItem.Update(). El secreto es crear los objetos Elevados y cerrar el delegate para luego usarlos fuera.
¿Por qué? y ¿por qué no?
No hay comentarios:
Publicar un comentario