web-dev-qa-db-fra.com

Comment permettre à un utilisateur anonyme d'accéder à une page donnée dans MVC?

J'ai activé l'authentification par formulaire dans mon application Web ASP.NET MVC. Je souhaite autoriser les utilisateurs anonymes à accéder uniquement à certaines pages spécifiques, notamment Register.cshtml par exemple. J'ai pu autoriser l'accès à mon fichier CSS à partir de mon web.config racine en faisant cela.

<location path="Content/Site.css">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

Maintenant, je veux autoriser l'accès anonyme à d'autres pages, comme Accueil et S'inscrire. Un organisme sait-il comment y parvenir?

31
Johnson Duru

Dans MVC, vous utilisez normalement le [Authorize] attribut pour gérer l'autorisation. Les contrôleurs ou les actions individuelles qui sont habillés avec cet attribut nécessiteront que l'utilisateur soit autorisé pour y accéder - toutes les autres actions seront disponibles pour les utilisateurs anonymes.

En d'autres termes, une approche de liste noire, où les actions qui nécessitent une autorisation sont inscrites sur la liste noire pour les utilisateurs anonymes utilisant [Authorize] - toutes les actions (non habillées avec l'attribut) seront disponibles.

Mise à jour:

Avec MVC4, un nouvel attribut a été introduit, à savoir le [AllowAnonymous] attribut. Avec la [Authorize] attribut, vous pouvez désormais adopter une approche de liste blanche à la place. L'approche de la liste blanche est accomplie en habillant l'ensemble du contrôleur avec le [Authorize] attribut, pour forcer l'autorisation pour toutes les actions dans ce contrôleur. Vous pouvez ensuite habiller des actions spécifiques, qui ne devraient pas nécessiter d'autorisation, avec le [AllowAnonymous] attribut, et donc la mise en liste blanche uniquement de ces actions. Avec cette approche, vous pouvez être sûr que vous n'oublierez pas, par accident, une action avec le [Authorize], le laissant accessible à tous, même s'il ne devrait pas.

Votre code pourrait alors ressembler à ceci:

[Authorize]
public class UserController : Controller {

   [AllowAnonymous]
   public ActionResult LogIn () {
      // This action can be accessed by unauthorized users
   }

   public ActionResult UserDetails () {
      // This action can NOT be accessed by unauthorized users
   }
}
50

Dans le Web.config j'avais l'autorisation ci-dessous

<authorization>
    <deny users ="?"/>
</authorization>

cela provoque la

[AllowAnonymous]

ne fonctionne pas correctement, j'ai dû retirer cette autorisation de mon Web.config, et dans tous les contrôleurs mettre la ligne

[Authorize]

avant la déclaration de la classe, pour fonctionner correctement.

7
Josue Morales