扩展AuthorizeAttribute覆盖AuthorizeCore或OnAuthorization

时间:2011-07-28 14:31:01

标签: asp.net-mvc asp.net-mvc-3 authorization action-filter

使用ASP.NET MVC我正在创建一个自定义Authorize属性来处理一些自定义授权逻辑。我已经看了很多例子,这很简单,但我的问题是哪种方法最好覆盖,AuthorizeCore或OnAuthorization?我见过许多覆盖其中一个的例子。有区别吗?

2 个答案:

答案 0 :(得分:76)

线索在返回类型中:

AuthorizeCore返回一个布尔值 - 它是决策代码。这应该仅限于查看用户的身份并测试他们所处的角色等。基本上它应该回答这个问题:

Do I want this user to proceed?

它不应该“执行”任何其他活动。

OnAuthorize返回void - 这是您放置此时需要发生的任何功能的地方。例如写入日志,在会话中存储一些数据等。

答案 1 :(得分:16)

您应该放置必须运行的任何代码,无论用户是第一次获得授权,还是在AuthorizeCore中使用缓存授权。

如果您查看源代码,可以看到AuthorizeCoreOnAuthorize都会调用OnCacheAuthorization。这允许缓存授权但仍允许某些操作并做出有关授权的实际决策。

如果您需要AuthorizationContext中的某些内容,那么您可以创建一个属性来保存信息,然后在AuthorizeCore方法中访问该信息。