75 votes

Est-il possible de désactiver l'autorisation sur une action dans un contrôleur MVC ?

J'ai un attribut d'autorisation sur un contrôleur, mais j'aimerais le désactiver lors d'une action. J'ai créé mon propre filtre d'autorisation et ajouté "Anonyme" dans la liste des rôles. Dans mon filtre, je retourne alors true si Anonymous apparaît dans la liste des rôles.

Cependant, il ne semble pas dépasser la page de connexion comme si l'autorisation du contrôleur préemptait autre chose.

139voto

user1308743 Points 3433

Vous pouvez ajouter [Authorize] à la classe de contrôleur, puis ajouter [AllowAnonymous] à l'action unique que vous ne souhaitez pas autoriser. Exemple:

 [Authorize]
public class AccountController : Controller
{
    public ActionResult Profile()
    {
        return View();
    }

    [AllowAnonymous]
    public ActionResult Login()
    {
        return View();
    }
}

2voto

Illuminati Points 2295

Je viens de créer une solution utilisant Azure ACS en tant que fournisseur d'identité fédéré et la réponse acceptée n'a pas fonctionné pour moi. Pour ceux qui ont du mal, ma solution consistait à contourner complètement la sécurité pour le contrôleur/les vues requis.

Créez un nouveau contrôleur/vues pour les actions dont vous avez besoin pour contourner l'autorisation.

Et dans le web.config ajoutez ce qui suit ,

  <location path="TheNameOfTheControllerYouWantToBypass">
  <system.web>
  <authorization>
    <allow users="*" />
  </authorization>
  </system.web>
 </location>

0voto

AaronHS Points 603

Ajoutez simplement l'attribut aux actions que vous souhaitez filtrer, et non à la classe du contrôleur. En ne décorant pas les actions, elles ne seront pas filtrées, à condition que le contrôleur ou l'un de ses contrôleurs de base n'ait pas l'attribut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X