J'ai fait un nouveau filtre d'action (attribut, similaire à [Autoriser]) qui autorise l'accès à une action de contrôleur basée sur une valeur de session. Cependant, je découvre essentiellement toutes mes actions de contrôleur avec cet attribut (à l'exception de très peu). p>
Alors, je pensais qu'il serait préférable d'avoir ce filtre d'action toujours em> exécuté sauf em> dans les cas où je joins un attribut [exontfromeuthorize] à une action du contrôleur? (Peut-être via hériter de ma propre classe de contrôleur?) P>
Comment puis-je faire cela? P>
7 Réponses :
Vous pouvez ajouter l'attribut à la classe à l'avoir applicable à toutes les méthodes de cette classe
[Authenticate] public class AccountController : Controller { public ActionResult Index() { return View(); } }
Faire des contrôleurs distincts Spaghetti-ize mon code ... à l'exclusion des méthodes spécifiques de l'attribut de niveau de classe serait exactement ce dont j'ai besoin.
Peut-être essayez peut-être d'ajouter un sauf code> de propriété sur votre premier attribut?
Comment la logique dans le filtre d'action fonctionnerait-elle cependant? (En fait le travail "exempté")?
courir avec JEEF3 la réponse, je suis venu avec cela. Il pourrait utiliser plus de vérification des erreurs et de robustesse comme plusieurs actions délimitées, mais l'idée générale fonctionne.
Dans votre cas particulier, vous pouvez tester la valeur de la session et décider de revenir de l'autorisation également. P>
[AuthorizeWithExemptions(Roles="admin", ExemptAction="Index")] public class AdminController : Controller ...
Consultez mon article sur CodeProject -
http: // www. codeproject.com/kb/web-security/authorizewithexemptionens.aspx p>
Dans cet article, je vais vous fournir une solution pour sécuriser les contrôleurs de l'application ASP.NET MVC de manière à ce que tous les Les actions sont sécurisées, sauf celles que vous définissez comme non sécurisées. p>
Snipper du code: P>
public override void OnAuthorization(AuthorizationContext filterContext) { ActionDescriptor action = filterContext.ActionDescriptor; bool IsUnsecured = action.GetCustomAttributes( typeof(UnsecuredActionAttribute), true).Count() > 0; //If doesn't have UnsecuredActionAttribute - then do the authorization filterContext.HttpContext.SkipAuthorization = IsUnsecured; base.OnAuthorization(filterContext); }
Pour toute personne lisant ceci en 2013+, MVC4 prend désormais en charge l'utilisation de Vous pouvez mettre l'autorisation sur le contrôleur, puis permettre à Anonyme sur toutes les fonctions que vous ne voulez pas autoriser. p> Exemple: P> [allowanonymous] code>
[Authorize]
public class HomeController : Controller
{
[AllowAnonymous]
public ActionResult Index()
{
}
}
Je comprends la question est assez obsolète mais de toute façon .. Si vous souhaitez appliquer un filtre à toutes les actions, ajoutez simplement des lignes suivantes dans global.Axax: et dans le filtre d'action Vous pouvez simplement Vérifiez si l'action comporte d'autres attributs de la manière suivante: p>
ActionDescriptor ne définit actuellement pas "ISDEfinefin".
Pour que quiconque arrive à cela pour la question dans le titre de la question, la première partie de ceci est la réponse réelle sur la manière de lancer un filtre d'action sur chaque action du contrôleur.
Pour quiconque lisait ceci en 2013+, MVC4 soutient désormais l'utilisation de [Allatanonymous] P>
Vous pouvez mettre l'autorisation sur le contrôleur, puis permettre à Anonymous sur toutes les fonctions que vous ne souhaitez pas autoriser. p>
Exemple: P>
[Autoriser] Classe publique HomeController: contrôleur { p>
[AllowAnonymous] public ActionResult Index() { }
Si vous dérivez votre [myauuthorize] de AutorizeAttribute, [Allowanonymous] fonctionnera pour vous.
Cette question est ancienne et en MVC4, un nouvel attribut est appelé
allowanonymous code> fait spécifiquement pour cela.