el cambio de SharePoint PublishingWeb bajo el contexto de seguridad elevado falla, ¿por qué?
-
26-09-2019 - |
Pregunta
Estoy teniendo problemas para actualizar un atributo de SharePoint publishingWeb bajo RunWithElevatedPrivileges. falla con la excepción de "La validación de seguridad para esta página es válida" en esta línea: "pubWeb.IncludeInCurrentNavigation = false;". A continuación se muestra el código que estoy tratando de correr. Normalmente se puede establecer AllowUnsafeUpdates = true, pero de publishingWeb no tienen esta propiedad especial.
Mi pregunta es ¿cuál es la forma correcta de actualización publishingWeb atributos en un contexto de elevada?
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite siteCollection = new SPSite(parentSiteUrl))
{
//siteCollection.AllowUnsafeUpdates = true;
using (SPWeb web = siteCollection.OpenWeb(subSiteUrl))
{
//web.AllowUnsafeUpdates = true;
if (PublishingWeb.IsPublishingWeb(web))
{
// hide new sub-site from navigation elements.
PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
pubWeb.IncludeInCurrentNavigation = false;
pubWeb.IncludeInGlobalNavigation = false;
pubWeb.Update();
}
}
}
});
Solución
Si este cambio se produce en una devolución de datos (POST), que debería estar llamando SPSecurity.ValidateFormDigest()
antes de hacer el cambio. AllowUnsafeUpdates sólo se utiliza para peticiones HTTP GET.
Si se trata de una petición GET, que hubiera esperado la línea comentada de salida de haber trabajado, pero ya que ha comentado supongo que no lo hizo. Yo sugeriría que usted utilice:
pubWeb.Web.AllowUnsafeUpdates = true
como PublishingWeb
es un contenedor para una instancia SPWeb
, que es accesible a través de la propiedad Web
. Es extraño, sin embargo, yo habría esperado que el SPWeb
suministrado al haber sido la misma instancia (y como tal, su línea comentada debería haber funcionado.)
Otros consejos
estaba leyendo un poco sobre el uso de esta propiedad
pubWeb.Navigation.ExcludeFromNavigation (true, web.ID);
en lugar de
pubWeb.IncludeInCurrentNavigation = false;
pubWeb.IncludeInGlobalNavigation = false;
No estoy seguro si esto es relevante para lo que su tratando de lograr.
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite siteCollection = new SPSite(parentSiteUrl))
{
//siteCollection.AllowUnsafeUpdates = true;
using (SPWeb web = siteCollection.OpenWeb(subSiteUrl))
{
//web.AllowUnsafeUpdates = true;
if (PublishingWeb.IsPublishingWeb(web))
{
// hide new sub-site from navigation elements.
PublishingWeb pubWeb = PublishingWeb.GetPublishingWeb(web);
pubWeb.Navigation.ExcludeFromNavigation(true, web.ID);
pubWeb.Update();
}
}
}
});