本篇旨在解析Identity中角色限制的原理。

需要的工具:Visual Studio、Reflector

问题提出:

1.当我们需要限制某个Controller的名称只需要某个或者某几个角色访问,这时,我们就会用Authorize过滤器过滤,用法如下:

那么,为什么我们只要指定上角色,就可以限制只有指定的角色可以访问当前的Controller或者Action呢?

先来看看Authorize源码(Reflector)

我们看到,在这个类中有Roles属性,就是我们传过来的角色名称,点开可以看到代码如下:

SplitString方法是分隔字符串按照某个字符

,所以当我们传入Roles时,以英文逗号隔开,分隔成字符串数组给_rolesSplit,点开类构造器和实例构造器可以看到初始化如下:

为字段赋初值。

以上是讲解我们传入的角色怎么赋到这个类中,下面看重量级的方法AuthorizeCore

我们看到这句是判断用户角色是否在当前允许访问的角色集合中,代码如下

if ((this._rolesSplit.Length > 0) && !this._rolesSplit.Any<string>(newFunc<string, bool>(user.IsInRole)))

其中IsInRole方法就是判断是否在角色中。

至此我们应该了解了,角色限制是怎么执行的。

Identity-第三章 Authorize原理解析的更多相关文章

  1. Spring Boot干货系列:(三)启动原理解析

    Spring Boot干货系列:(三)启动原理解析 2017-03-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说 ...

  2. 【转】Spring Boot干货系列:(三)启动原理解析

    前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂SpringBoot内部启动原理,以后难免会吃亏.所以这次博主就跟你们一起一步步揭开Sprin ...

  3. 【转载】Spring boot学习记录(三)-启动原理解析

    前言:本系列文章非本人原创,转自:http://tengj.top/2017/04/24/springboot0/ 正文 我们开发任何一个Spring Boot项目,都会用到如下的启动类 @Sprin ...

  4. 三、Nginx原理解析

    Nginx原理解析 一.反向代理 工作流程 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址: 反向代理服务器接受用户的请求: 反向代理服务器在本地缓存中查找 ...

  5. (转)Spring Boot干货系列:(三)启动原理解析

    转:http://tengj.top/2017/03/09/springboot3/ 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说,如果不大懂Spri ...

  6. C++面向对象程序设计第三章习题答案解析

    整理一下自己写的作业,供考试前复习用,哈哈 进入正题!!! 题目: 2.分析下面的程序,写出其运行时的输出结果 这里就不展示课本源代码,直接给出修改后的代码,错误部分代码已给出具体的注释 #inclu ...

  7. 第三章 CLR如何解析引用类型

    C#编译器将代码打包成托管模块后,接着会将这些模块合并成程序集,然后统一加载到一个具体的目录,CLR在这个目录查找并且加载所需要的DLL或者exe. 程序集分类:弱命名程序集和强命名程序集,强命名程序 ...

  8. 深入理解NIO(三)—— NIO原理及部分源码的解析

    深入理解NIO(三)—— NIO原理及部分源码的解析 欢迎回到淦™的源码看爆系列 在看完前面两个系列之后,相信大家对NIO也有了一定的理解,接下来我们就来深入源码去解读它,我这里的是OpenJDK-8 ...

  9. 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数

    整个引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, la ...

随机推荐

  1. AOT

    预 (AOT) 编译器 https://angular.cn/docs/ts/latest/cookbook/aot-compiler.html To run your app in AoT mode ...

  2. ***Java多线程发展简史

    http://blog.jobbole.com/28297/ 本文来自四火的博客(@RayChase),由@_Zhijun 推荐 这篇文章,大部分内容,是周五我做的一个关于如何进行Java多线程编程的 ...

  3. OpenStack项目列表

    这个也是必须要熟悉的哟. ~~~~~~~~~~ OpenStack是一个美国国家航空航天局和Rackspace合作研发的,以Apache许可证授权,并且是一个自由软件和开放源代码项目.OpenStac ...

  4. [JAVA]HDU 4919 Exclusive or

    题意很简单, 就是给个n, 算下面这个式子的值. $\sum\limits_{i=1}^{n-1} i \otimes (n-i)$ 重点是n的范围:2≤n<10500 比赛的时候 OEIS一下 ...

  5. Altium查看所有快捷键,图文教程

    方式一:依次打开“查看”>>"工作区面板">>“Help”>>“快捷方式”.即可. 英文版“快捷方式”为“shotcut” 方式二: 留意右下角 ...

  6. 读写UTF-8、Unicode文件(加上了文件头,貌似挺好用)

    conf配置文件一些为UTF-8和Unicode格式,这样便可良好的支持多语言,从网上查阅资料后,将读写UTF-8.Unicode文件写了几个最精简的函数,更新后加了是否写文件头的功能,以适应更多需要 ...

  7. puTTY与SecureCRT的比较

    从网上看到别人对这两个工具的比较:从windows访问linux,除了samba之外,日常操作用得最多的大概就是PuTTY和SecureCRT Putty是免费的,SecureCRT是收费的(当然,有 ...

  8. BZOJ_1016_[JSOI2008]_最小生成树计数_(dfs+乘法原理)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1016 给出一张图,其中具有相同权值的边的数目不超过10,求最小生成树的个数. 分析 生成树的计 ...

  9. iOS7 iOS8 毛玻璃效果的分别实现

    iOS8用系统的, iOS7用第三方的(效果还是挺快的.) https://github.com/KiranPatel-iOS/KPBlurEffect [_headBGIV sd_setImageW ...

  10. If-Modified-Since & If-None-Match

    google告诉网站站长:您的网络服务器支持 If-Modified-Since HTTP 标头.通过该功能,您的网络服务器可以告诉 Google 自上次抓取您的网站以来,内容是否已发生变化.该功能可 ...