web-dev-qa-db-fra.com

Étendre AuthorizeAttribute Override AuthorizeCore ou OnAuthorization

En utilisant ASP.NET MVC, je crée un attribut Authorize personnalisé pour prendre en charge une logique d'autorisation personnalisée. J'ai regardé beaucoup d'exemples et c'est assez simple, mais ma question est de savoir quelle méthode est la meilleure pour remplacer, AuthorizeCore ou OnAuthorization? J'ai vu de nombreux exemples l'emporter sur l'un ou l'autre. Y a-t-il une différence?

55
Nick Olsen

L'indice est dans les types de retour:

AuthorizeCore renvoie un booléen - c'est prise de décision code. Cela devrait se limiter à regarder l'identité de l'utilisateur et à tester les rôles dans lesquels il se trouve, etc. etc. Fondamentalement, cela devrait répondre à la question:

Do I want this user to proceed?

Il ne doit effectuer aucune activité supplémentaire "sur le côté".

OnAuthorize renvoie void - c'est là que vous mettez fonctionnalité qui doit se produire à ce stade. par exemple. Écrivez dans un journal, stockez des données dans la session, etc., etc.

76
BonyT

Vous devez placer tout code devant s'exécuter, que l'utilisateur soit autorisé pour la première fois ou s'il utilise une autorisation mise en cache dans AuthorizeCore.

Si vous regardez le code source, vous pouvez voir que AuthorizeCore est appelé à la fois par OnAuthorize et OnCacheAuthorization. Cela permet à l'autorisation d'être mise en cache mais autorise toujours certaines actions et de prendre les décisions réelles concernant l'autorisation.

Si vous avez besoin de quelque chose dans AuthorizationContext, vous pouvez créer une propriété pour contenir les informations, puis y accéder dans la méthode AuthorizeCore.

16
Erik Funkenbusch