3

Dans le site ASP.NET MVC que je suis en train de construire, j'ai quelques méthodes où les utilisateurs qui les utilisent doivent jouer un certain rôle (comme il arrive, si ce n'est pas le cas, cela signifie qu'ils sont suspendus du site). Pour ce faire, j'utilise l'attribut [Authorize(Roles="RoleName")] sans aucune difficulté.Si l'utilisateur actuel n'est pas dans le rôle requis par [Authorize], puis-je les rediriger automatiquement?

Cependant, je ne comprends pas très bien ce qui arrive aux utilisateurs qui ne réussissent pas cette vérification [Authorize]? Que montrent-ils?

Je souhaite rediriger les utilisateurs suspendus vers une action différente s'ils essaient d'utiliser ces méthodes. Pour l'instant, j'utilise un attribut vide [Authorize] (sans aucun rôle spécifié) puis je vérifie dans le code Action si l'utilisateur fait partie du rôle ou non. Mon approche ressemble à une odeur de code pour moi. Est-il possible de spécifier ce qu'il faut montrer à un utilisateur (ou où les rediriger) s'il ne passe pas le test [Authorize]?

Répondre

4

Comme indiqué sur la AuthorizeAttribute MSDN page:

Si un utilisateur non autorisé tente d'accéder à une méthode qui est marqué avec l'attribut Autorisez, le framework MVC un état 401 retourne code HTTP . Si le site est configuré pour utiliser l'authentification par formulaire ASP.NET , le code d'état 401 amène le navigateur à rediriger l'utilisateur vers la page de connexion.

Si vous utilisez l'authentification par formulaire et que vous souhaitez rediriger vers la page de connexion, vous n'avez rien à faire. Sinon, implémentez votre propre IAuthorizationFilter pour effectuer la redirection.

Édition: voir this blog post qui réimplémente fondamentalement AuthorizeAttribute manuellement, avec redirection personnalisée.

+0

Comment redirige-t-il l'utilisateur vers la page de connexion si l'utilisateur est déjà connecté (mais ne dispose pas de privilèges suffisants)? Aussi, comment puis-je implémenter mon propre IAuthorizationFilter? Merci! –

1

Si vous ne voulez pas implémenter votre propre IAuthorizationFilter, je crois que vous devriez pouvoir remplacer le comportement par défaut de l'attribut Authorize. Juste hériter et remplacer la méthode HandleUnauthorizedRequest. Accordé, vous aurez toujours besoin d'un moyen de déterminer si l'utilisateur a échoué en raison de ne pas être connecté par rapport à ne pas avoir les bonnes autorisations. Il peut être plus propre juste pour écrire votre propre filtre d'autorisation.

Questions connexes