Расширить AuthorizeAttribute Override AuthorizeCore или OnAuthorization - PullRequest
54 голосов
/ 28 июля 2011

Использование ASP.NET MVC Я создаю собственный атрибут Authorize, чтобы позаботиться о некоторой пользовательской логике авторизации.Я посмотрел на множество примеров, и это довольно просто, но мой вопрос в том, какой метод лучше переопределить, AuthorizeCore или OnAuthorization?Я видел много примеров, перекрывающих один или другой.Есть ли разница?

Ответы [ 2 ]

76 голосов
/ 28 июля 2011

Подсказка в типах возврата:

AuthorizeCore возвращает логическое значение - это код принятия решения код. Это должно быть ограничено просмотром личности пользователя и проверкой роли, в которой он находится и т. Д. И т. Д. По сути, он должен ответить на вопрос:

Do I want this user to proceed?

Он не должен выполнять никаких дополнительных действий «на стороне».

OnAuthorize возвращает void - это то место, куда вы помещаете любую функциональность , которая должна появиться в этой точке. например Пишите в журнал, сохраняйте некоторые данные в сессии и т. Д. И т. Д.

16 голосов
/ 14 октября 2012

Вы должны поместить любой код, который должен выполняться, независимо от того, авторизуется ли пользователь впервые или он использует кэшированную авторизацию в AuthorizeCore.

Если вы посмотрите на исходный код, вы увидите, что AuthorizeCore вызывается как OnAuthorize, так и OnCacheAuthorization. Это позволяет кэшировать авторизацию, но все же разрешать определенные действия и принимать фактические решения об авторизации.

Если вам нужно что-то из AuthorizationContext, вы можете создать свойство для хранения информации, а затем получить к нему доступ в методе AuthorizeCore.

...