Pregunta

Quiero obtener un elemento de lista al que el usuario actual no tenga acceso, pero necesito obtenerlo en código. Cuando uso SPSecurity.RunWithElevatedPrivileges eso no funciona.

Es porque estoy usando el objeto web del contexto actual en la página de la aplicación.

Si quiero hacer que el código funcione, tengo que construir otro objeto spsite y spweb en RunWithElevatedPrivileges delegado pero no quiero hacer eso.

¿Cómo puedo lograr esto utilizando el contexto web actual en la página de aplicaciones?

¿Fue útil?

Solución

Debe instanciar nuevos objetos SPSITS y SPWEB dentro de su delegado RunWitHelEvatedPrivileges () utilizando las propiedades de identificación de los objetos SPSITE y SPWEB del contexto actual:

Guid siteId = SPContext.Current.Site.ID;
Guid webId = SPContext.Current.Web.ID;

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    using (SPSite site = new SPSite(siteId))
    {
        using (SPWeb web = site.OpenWeb(webId))
        {
            // Your code here
        }
    }
});

¿Puedo preguntar por qué "no quieres" crear nuevos objetos SPSITS y SPWEB en tu delegado RunWitHelEvatedPrivileges ()? Si usa el patrón de diseño que he demostrado anteriormente, no tiene que preocuparse por llamar a la eliminación () en los nuevos objetos que ha creado.

Otros consejos

Gracias, nos ayudó mucho ... avanzó mucho tiempo. Gran respuesta :)

De Spsecurity.runwithelevatedprivileges:

"Se puede hacer referencia a un objeto SPSITE creado fuera del delegado dentro del delegado, sin embargo, los métodos y los evaluadores de propiedades del objeto ejecutándose con los privilegios del contexto del usuario en el que se crearon los objetos, no con los privilegios elevados".

Básicamente, tu deber Cree nuevos objetos dentro del delegado para ejecutar con los derechos de control completos.

Debe crear un nuevo SPSIT dentro del bloque SPSECURITY.

Para obtener información detallada sobre SPSECURITY.

Suplantación en SharePoint: una descripción extrema

Licenciado bajo: CC-BY-SA con atribución
scroll top