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?
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.
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.