[SharePoint 2010] Supprimer la redirection automatique d’un “access denied”
Comment SharePoint gère les access denied ?
Par défaut SharePoint gère les problèmes d’accès en redirigeant automatiquement les utilisateurs vers une page en particulier : http://{site}/_layouts/AccessDenied.aspx

Modifier ce comportement ?
Nous pourrions vouloir, cependant, réagir d’une manière différente et personnalisée à un “access denied”.
La propriété qui gère ce système est celle de la classe SPSecurity : CatchAccessDeniedException.
Une fois la propriété à true, nous pourrons catcher l’exception : “UnauthorizedAccessException”
Je vous propose 3 manières différentes pour manipuler cette propriété :
- Manipulation directe de la classe SPSecurity
Voici un exemple de manipulation :
SPSite site = SPContext.Current.Site;
SPSecurity.CatchAccessDeniedException = true;
try
{
// Code here
}
catch (UnauthorizedAccessException exception)
{
// code here
throw;
}
finally
{
SPSecurity.CatchAccessDeniedException = false;
}
Attention cependant avec cette propriété. Il faut penser à la repasser à false, une fois notre traitement de l’exception effectué. Il faut aussi prendre garde aux exceptions qui pourraient être lancée dans le code, qui empêcherait de remettre la propriété à false.
C’est une propriété est une manière plus rapide d’accéder à celle de la classe SPSecurity. Elle se manipule exactement de la même manière que cette précédente.
SPSite site = SPContext.Current.Site;
site.CatchAccessDeniedException = true;
try
{
// Code here
}
catch (UnauthorizedAccessException exception)
{
// code here
throw;
}
finally
{
site.CatchAccessDeniedException = false;
}
Attention cependant avec cette propriété. Il faut penser à la repasser à false, une fois notre traitement de l’exception effectué. Il faut aussi prendre garde aux exceptions qui pourraient être lancée dans le code, qui empêcherait de remettre la propriété à false.
La méthode la plus intéressante ici, est la méthode statique SuppressAccessDeniedRedirectInScope() de la classe SPSecurity.
Cette méthode, va créer un contexte dans lequel la propriété citée plus haut :SPSecurity.CatchAccessDeniedException sera à true tout au long de son utilisation.
Cette propriété sera remise dans le même état qu’à l’entrée dans le contexte.
L’avantage de cette méthode est qu’il n’est plus nécessaire de gérer tous les cas possible pour remettre la propriété dans son état précédent une fois notre traitement terminé.
Pour l’utiliser, rien de plus simple :
using (new SPSecurity.SuppressAccessDeniedRedirectInScope())
{
try
{
// Code here
}
catch (UnauthorizedAccessException ex)
{
// code here
}
}Vous savez tout maintenant pour réaliser des traitements lors de la levée d’une exception Access Denied.
Jicay
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :