角色限制(AuthorizeAttribute)
首选,我看网上很多说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)相关推荐
- MVC源码学习之AuthorizeAttribute
常见的Controller定义方式: public class HomeController : Controller {public ActionResult Index(){return View ...
- Asp.Net Core--基于角色的授权
翻译如下: 当创建身份时,它可以属于一个或多个角色,例如Tracy可以属于管理员和用户角色,而Scott可以仅属于用户角色. 如何创建和管理这些角色取决于授权过程的后备存储. 角色通过ClaimsPr ...
- Asp.net MVC3.0 基于不同的角色显示不同的菜单
前面提到过用Asp.net MVC3.0正在做一个问答系统性质的论坛.前期把菜单全部显示以方便测试模块功能.现在正在完善,加上角色模块,然后不同的角色登陆系统会看到不同的菜单栏,还有就是游客(未登录用 ...
- Bootstrap+angularjs+MVC3+分页技术+角色权限验证系统
1.Bootstrap使用教程 相关教程: http://www.bootcss.com/components.html 页面使用代码: <script src="@Url.Conte ...
- authorize如何控制多个角色权限】_lincmsdotnetcore.是如何方法级别的权限控制(API级别)的...
方法级别的权限控制(API级别) Lin的定位在于实现一整套 CMS的解决方案,它是一个设计方案,提供了不同的后端,不同的前端,而且也支持不同的数据库 目前官方团队维护 lin-cms-vue,lin ...
- asp.net MVC之AuthorizeAttribute浅析
AuthorizeAttribute是asp.net MVC的几大过滤器之一,俗称认证和授权过滤器,也就是判断登录与否,授权与否.当为某一个Controller或Action附加该特性时,没有登录或授 ...
- Asp.Net Core AuthorizeAttribute 和AuthorizeFilter 跟进及源码解读
一.前言 IdentityServer4已经分享了一些应用实战的文章,从架构到授权中心的落地应用,也伴随着对IdentityServer4掌握了一些使用规则,但是很多原理性东西还是一知半解,故我这里持 ...
- AuthorizeAttribute示例
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
- 自定义AuthorizeAttribute实现MVC权限设计
文本为您介绍:自定义AuthorizeAttribute实现MVC权限设计,主要是通过将角色与controller.action等参数关联进行用户权限判断,然后通过自定义AuthorizeAttrib ...
最新文章
- 如何看待179所高校新增 AI 本科专业,研究生扩招也瞄准 AI?
- Microbiome:微生物组研究中优化方法和规避误区
- 代码编辑神器VIM(附我写acm程序时的配置)(转)
- c mysql 索引_MySQL 多列索引的生效规则
- 专访Connolly:为什么我们需要手动回归测试宣言?
- oracle表空间最大30G?如果一张表超过30G怎么办
- matlab中获取view,ios 怎么获取一个view的位置
- 深度学习之边框回归(Bounding Box Regression)
- showModalDialog页面
- ubuntu12.04 的 root 用户显示 中文 和 默认显示中文的方法
- EasyUI TextBox的onkeypress事件
- 库存系统 代码 java_商品库存管理系统java源代码
- 22000字深入研究消费电子光学传感器行业
- Sniffer数据报文解码详解
- 深度学习之损失函数小结
- 研究生最全文献查询、下载网站汇总,汇集各个专业权威国外网站!
- 监控平台设计之GraphitePrometheus存储
- C++ fstream 创建文件
- 【Cancer Research】由Y染色体LINC00278编码的新型微肽与AR信号通路介导的男性食管鳞状细胞癌相关
- 多伦多大学计算机ib成绩要求,QS世界Top30大学 A-level及IB 成绩详细要求!