Cómo perder una noche en un error o no morir en el intento programando

En estos días me encontraba trabajando en un Event Receiver ya que por un cambio en el requerimiento fue necesario implementar privilegios elevados, ya que era necesario obtener unos campos de un objeto en el cuál el usuario común no tiene permiso.

Para lograr el objetivo se utilizó el archiconocido SPSecurity.RunWithElevatedPrivileges sin embargo, cuando se probaba con un usuario administrador todo funcionaba perfectamente, sin embargo, con un usuario no administrador el código fallaba con error de acceso denegado. Luego de revisar por largas horas el código, finalmente encontré algo que se me había pasado por alto, como sabemos, cuando se está dentro de RunWithElevatedPrivileges() se deben crear los objetos SPSite y SPWeb ya que de lo contrario no se podrá hacer uso del mismo con privilegios elevados.

Así que siempre recuerda

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    ...
    using(SPSite site = new SPSite(SPContext.Current.site.Url))
    {
        ...
    }
});