Est-il possible de remplacer un attribut qui a été appliqué au niveau du contrôleur sur une méthode spécifique?
-
06-07-2019 - |
Question
Si j'ai appliqué un attribut d'autorisation au niveau du contrôleur, est-il possible de le remplacer sur l'une des méthodes de ce contrôleur?
Merci
James
La solution
Cela dépend du type de "substitution". tu veux. Vous ne pouvez pas supprimer l'attribut qui se trouve sur la classe, mais vous pouvez l'ajouter à la méthode afin de rendre les choses plus restrictives.
Mise à jour en réponse à des commentaires. Tout d'abord, créer votre propre AuthorizeAttribute est quelque peu dangereux. AuthorizeAttribute contient du code qui interagit avec les attributs de mise en cache afin de garantir que le cache ne peut pas fournir de contenu protégé à un utilisateur non autorisé. Au minimum, vous devez sous-type AuthorizeAttribute existant au lieu de créer quelque chose de complètement nouveau. Toutefois, il est généralement préférable d’utiliser l’autorisation AuthorizeAttribute existante et de spécialiser votre autorisation en créant un nouveau / trouvant un fournisseur d’appartenance ASP.NET existant.
Je ne pense pas que ce serait bien de disposer d'un filtre sur une action qui "annule". un filtre sur un contrôleur. Toutefois, vous pouvez modifier la conception du filtre sur le contrôleur pour ne pas requérir d'autorisation pour une action portant un nom donné. Vous pouvez, par exemple, remplacer la méthode AuthorizeAttribute.AuthorizeCore pour tester un nom d'action de la même manière que la méthode existante teste le nom d'utilisateur et les rôles. Prenez bien note des commentaires de cette méthode concernant la sécurité des threads.
Autres conseils
Je ne suis pas sûr que ce soit exactement la même question, mais cela peut aider ...