首选,我看网上很多说System.Web.Mvc.AuthorizeAttribute的,有的只讲了用法,内部方法没有讲清,还有的说的太专业对于底层研究不深的朋友很不友好,因为这篇只是根据本人的胃口对MVC的这个组件进行整理

1.在网上看的资料 说以下的两块代码是 AuthorizeAttribute中,OnAuthorization和AuthorizeCore方法的源码 ,是不是源码我不清楚,如果小伙伴在其他平台有其它源代码请告知我,咱们全当源码分析吧

AuthorizeAttribute的执行方法是 如果某一控制器被标记Attribute,则来自于http的访问变会首先被过滤,第一步就是执行OnAuthorization();

public virtual void OnAuthorization(AuthorizationContext filterContext)
{if (filterContext == null){throw new ArgumentNullException("filterContext");}if (OutputCacheAttribute.IsChildActionCacheActive(filterContext)){throw new InvalidOperationException(MvcResources.AuthorizeAttribute_CannotUseWithinChildActionCache);}bool skipAuthorization = filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true)|| filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AllowAnonymousAttribute), inherit: true);if (skipAuthorization){return;}if (AuthorizeCore(filterContext.HttpContext)){HttpCachePolicyBase cachePolicy = filterContext.HttpContext.Response.Cache;cachePolicy.SetProxyMaxAge(new TimeSpan(0));cachePolicy.AddValidationCallback(CacheValidateHandler, null /* data */);}else{HandleUnauthorizedRequest(filterContext);}
}
protected virtual bool AuthorizeCore(HttpContextBase httpContext)
{if (httpContext == null){throw new ArgumentNullException("httpContext");}IPrincipal user = httpContext.User;if (!user.Identity.IsAuthenticated){return false;}if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase)){return false;}if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole)){return false;}return true;
}
```我们可以看到OnAuthorization方法中 在一系列的非空,缓存等验证后调用了AuthorizeCore权限验证方法,如果验证通过则出方法,如果不通过则调用HandleUnauthorizedRequest()方法因此我们在自己的继承类可以从写这三个方法达到权限验证
OnAuthorization()为入口方法
AuthorizeCore()验证方法
HandleUnauthorizedRequest()验证失败后的跳转路径当然我们可以只从写OnAuthorization()这一个方法  在里面完成所有操作

角色限制(AuthorizeAttribute)相关推荐

  1. MVC源码学习之AuthorizeAttribute

    常见的Controller定义方式: public class HomeController : Controller {public ActionResult Index(){return View ...

  2. Asp.Net Core--基于角色的授权

    翻译如下: 当创建身份时,它可以属于一个或多个角色,例如Tracy可以属于管理员和用户角色,而Scott可以仅属于用户角色. 如何创建和管理这些角色取决于授权过程的后备存储. 角色通过ClaimsPr ...

  3. Asp.net MVC3.0 基于不同的角色显示不同的菜单

    前面提到过用Asp.net MVC3.0正在做一个问答系统性质的论坛.前期把菜单全部显示以方便测试模块功能.现在正在完善,加上角色模块,然后不同的角色登陆系统会看到不同的菜单栏,还有就是游客(未登录用 ...

  4. Bootstrap+angularjs+MVC3+分页技术+角色权限验证系统

    1.Bootstrap使用教程 相关教程: http://www.bootcss.com/components.html 页面使用代码: <script src="@Url.Conte ...

  5. authorize如何控制多个角色权限】_lincmsdotnetcore.是如何方法级别的权限控制(API级别)的...

    方法级别的权限控制(API级别) Lin的定位在于实现一整套 CMS的解决方案,它是一个设计方案,提供了不同的后端,不同的前端,而且也支持不同的数据库 目前官方团队维护 lin-cms-vue,lin ...

  6. asp.net MVC之AuthorizeAttribute浅析

    AuthorizeAttribute是asp.net MVC的几大过滤器之一,俗称认证和授权过滤器,也就是判断登录与否,授权与否.当为某一个Controller或Action附加该特性时,没有登录或授 ...

  7. Asp.Net Core AuthorizeAttribute 和AuthorizeFilter 跟进及源码解读

    一.前言 IdentityServer4已经分享了一些应用实战的文章,从架构到授权中心的落地应用,也伴随着对IdentityServer4掌握了一些使用规则,但是很多原理性东西还是一知半解,故我这里持 ...

  8. AuthorizeAttribute示例

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. 自定义AuthorizeAttribute实现MVC权限设计

    文本为您介绍:自定义AuthorizeAttribute实现MVC权限设计,主要是通过将角色与controller.action等参数关联进行用户权限判断,然后通过自定义AuthorizeAttrib ...

最新文章

  1. 如何看待179所高校新增 AI 本科专业,研究生扩招也瞄准 AI?
  2. Microbiome:微生物组研究中优化方法和规避误区
  3. 代码编辑神器VIM(附我写acm程序时的配置)(转)
  4. c mysql 索引_MySQL 多列索引的生效规则
  5. 专访Connolly:为什么我们需要手动回归测试宣言?
  6. oracle表空间最大30G?如果一张表超过30G怎么办
  7. matlab中获取view,ios 怎么获取一个view的位置
  8. 深度学习之边框回归(Bounding Box Regression)
  9. showModalDialog页面
  10. ubuntu12.04 的 root 用户显示 中文 和 默认显示中文的方法
  11. EasyUI TextBox的onkeypress事件
  12. 库存系统 代码 java_商品库存管理系统java源代码
  13. 22000字深入研究消费电子光学传感器行业
  14. Sniffer数据报文解码详解
  15. 深度学习之损失函数小结
  16. 研究生最全文献查询、下载网站汇总,汇集各个专业权威国外网站!
  17. 监控平台设计之GraphitePrometheus存储
  18. C++ fstream 创建文件
  19. 【Cancer Research】由Y染色体LINC00278编码的新型微肽与AR信号通路介导的男性食管鳞状细胞癌相关
  20. 多伦多大学计算机ib成绩要求,QS世界Top30大学 A-level及IB 成绩详细要求!

热门文章

  1. 企业数字化转型:信息化与数字化
  2. 这才是计算机科学_计算机大量应用
  3. 白天求生存、晚上求发展
  4. office2003弹出安装提示
  5. recharts中Legend的margin属性设置无效
  6. MyCnCart 专业版 - 【新闻订阅弹出框】及【新闻订阅横幅】
  7. 中国大学生计算机设计大赛微课类,我院代表队在2018年(第11届)中国大学生计算机设计大赛(微课与教学辅助类)中喜获二等奖...
  8. 熟能生巧vector
  9. 杰理之充电仓带通信方案【篇】
  10. 普中F28335GPIO正确的初始化方法(由LED、继电器总结)