30/11/10

Error de Acceso Denegado accediendo a una audiencia

Es posible que incluso ejecutando código con privilegios elevados os falle el código cuando accedeis a una audiencia para consultar si un usuario pertenece a la misma. El código sería mas o menos el siguiente:

try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteName))
{
AudienceManager audManager = new AudienceManager (ServerContext.GetContext( site));
Audience audience = audManager.GetAudience(audienceName);
ArrayList userInfoCollection = audience.GetMembership();

foreach (UserInfo userInfo in userInfoCollection)

{
if (userInfo.Email.ToUpper() == user.Email.ToUpper())
result = true;
}
}
}
});
}
catch (Exception ex)
{
}

Este error en un principio puede deberse a permisos por parte del usuario que está corriendo el pool de aplicaciones. Para validar eso teneis que ir a la seccion de administracion del proveedor de servicios compartidos y comprobar que el usuario tiene permisos para administrar audiencias.

Una vez validado esto, si os sigue fallando podeis probar este codigo que a mi me funcionó sin problemas:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteName))
{
AudienceManager audManager = new AudienceManager (ServerContext.GetContext( site));
if (audManager.IsMemberOfAudience(user.LoginName, audienceName))
result = true;
}
});

16/11/10

modificar el 'Filenotfoundpage' de la aplicacion web

Es posible que en nuestro entorno nos haga falta establecer una página de fichero no encontrado cuando se inserte una URL a un documento que no se encuentre, evitando la fea pagina de error 404. Para poder hacer esto en Sharepoint no es algo tan trivial y habrá que realizar una serie de pasos:

1.- Crear en /_LAYOUTS el fichero Custom404.html (por ejemplo) con el siguiente código:

2.- Crear la pagina de error en el raíz /home/paginas/error404.aspx:

esta pagina de error podrá tener nuestra master page, nuestro logo corporativo, etc.

3.- Crear el fichero error404.aspx en /_LAYOUTS/3082 con el siguiente código:


Y aquí viene la parte más complicada del proceso. Resulta que las web applications de sharepoint, por defecto tienen el FileNotFoundPage a Null y hay que establecérselo. Para ello hay que crearse una aplicación de consola que cambie eso. Yo la he creado para desmoss pero el EXE habría que lanzarlo en producción. El código es muy simple:


Y con esto tendríamos la página de fichero no encontrado para toda nuestra intranet.


saludos,
Juan