更新 : 2018-11-24

记入一些思考

asp.net core + identity 的权限是这样的

user = 1 个登入账号

role = 1 个角色 (类似于公司里的一个职位)

claim = 令牌 (类似于古代,见令令牌如见皇帝或者将军)

一般上我们会把权限建立在 Page, 操作, 资源上.

这里我只说操作, 操作指的是一个 api 接口, 一个 controller 或是一个 action

identity 给了我们一个 policy 的概念

一个 policy 就是说,一个对令牌的判断.

比如,如果一个 user 访问用于某几个令牌,就表示它可以执行.

所以 controller 和 action 我们就会写很多对令牌的要求.

常见的是问,请问你有没有 "admin" 这个令牌丫 ?

也可以是, 请问你有没有 "可转账" 这个令牌丫 ?

那么,令牌这么多,要怎样管理呢 ?

我们知道一间公司一定会有很多工作,要分工。

通常我们把工作分组成任务 (task).

比如,管理广告,管理 live chat, 管理网页内容。等等

这些都是任务。

然后我们需要把任务交给某些人做,人来人往我们得找到一个固定的依赖,所以就有了职位这个概念。

所以任务最后都分给了某些职位.

在 identity 管理中,如果我们的职位很少,而且任务没有重叠,我们可以把 claim 当做 role 来用。

当职位变得多, 任务又有重叠 (同样任务,但是 2 个职位都可以做). 我们可以把 claim 设计当 task 来用。

如果真的要分到很细的话,我们可以把每个 action 定义为一个 cliam, 然后设计一个 task 的概念

1 个任务需要调用多个 action, 所以一个 task 需要多个 claim

然后 1 个 role 可以拥有多个 task (一个职位可以拥有多个 task 符合管理)

最后一个 user 可以有多个 roles, 或者直接拥有某些 task

要有 task 的概念,需要对 identity 扩展一些些.

另外说说授权。

一般上一个公司都会有一个 HR 部分.

只有 HR 有能力处理 user account.

比如给予权限等等。但是有一点不要混淆。在系统上开来,HR 的权限很大,他可以 disable 一个 CEO 的账号。

但是其实他只是任命执行操作而已。就好像是一个 sales man 可以创建订单,但前提是客户要购买东西。他并不可以自己提客户下单一样。

HR 有可能会因为区域很大,而分出好几个区。

account 应该是属于某个区的,也就是说 2 个 HR 并不可以互相访问对方的人事。

参考 :

https://www.cnblogs.com/RainingNight/p/authorization-in-asp-net-core.html

https://www.cnblogs.com/RainingNight/p/authorize-how-to-work-in-asp-net-core.html

https://www.cnblogs.com/RainingNight/p/dynamic-authorization-in-asp-net-core.html

这 3 篇基本上已经讲完了.

对比 .net 4.x 主要是多了 policy, requirement, authoService

一个 policy 表示多个 requirement

一个 requirement 表示多种断言, 比如有没有 claim, 有没有 role 等等

同一个 requirement 还能有不同的验证逻辑.

policy 还有一个合并与其它 policy 的能力. 非常灵活.

Asp.net core 学习笔记 (授权)的更多相关文章

  1. Asp.net core 学习笔记 ( identity server 4 JWT Part )

    更新 : id4 使用这个 DbContext 哦 dotnet ef migrations add identity-server-init --context PersistedGrantDbCo ...

  2. Asp.net Core学习笔记

    之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...

  3. Asp.net core 学习笔记 ( Data protection )

    参考 : http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html http://cnblogs.com/xishuai/p/a ...

  4. Asp.net core 学习笔记 SignalR

    refer : https://kimsereyblog.blogspot.com/2018/07/signalr-with-asp-net-core.html https://github.com/ ...

  5. Asp.net core (学习笔记 路由和语言 route & language)

    https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing?view=aspnetcore-2.1 https://doc ...

  6. Asp.net core 学习笔记 ( Web Api )

    asp.net core 把之前的 webapi 和 mvc 做了结合. mvc 既是 api. 但是后呢,又发现, api 确实有独到之处,所以又开了一些补助的方法. namespace Proje ...

  7. Asp.net core 学习笔记 ( IIS, static file 性能优化 )

    更新 : 2019-02-06 最后还是把 rewrite 给替换掉了. 所以 rewrite url 也不依赖 iis 了咯. refer : https://docs.microsoft.com/ ...

  8. Asp.net core 学习笔记 QR code and Barcode

    QR code 和 Barcode 经常会使用到. Java 阵营有著名的 zxing https://github.com/zxing/zxing .Net 有对接它的 port https://g ...

  9. Asp.net core 学习笔记 ( HttpClient )

    2018-09-18 core 2.1 之后有新的方案咯 http://www.talkingdotnet.com/3-ways-to-use-httpclientfactory-in-asp-net ...

随机推荐

  1. CSS3过渡、变形和动画

    1.CSS3过渡 所谓CSS3过渡,就是使用CSS3让元素从一种状态慢慢转换到另一种状态.如鼠标的悬停状态就是一种过渡.如下例子: #content a{     text-decoration: n ...

  2. Floyd算法(三)之 Java详解

    前面分别通过C和C++实现了弗洛伊德算法,本文介绍弗洛伊德算法的Java实现. 目录 1. 弗洛伊德算法介绍 2. 弗洛伊德算法图解 3. 弗洛伊德算法的代码说明 4. 弗洛伊德算法的源码 转载请注明 ...

  3. C#删除字符串最后一个字符的几种方法

    字符串:string s = "1,2,3,4,5,"目标:删除最后一个 "," 方法:1.用的最多的是Substring,这个也是我一直用的s = s.Sub ...

  4. Xcode中文乱码问题

    老师给拷贝的程序用Xcode打开中文显示是乱码,而预览里面是正常显示的,Xcode默认编码UTF-8没错的,怎么办呢? 解决办法:用自带的文本编辑器打开,全选,复制,Xcode中打开文件,粘贴,ok~ ...

  5. Debug的F5~F8用法

    快捷键(F6)单步执行程序,遇到方法时跳过. 快捷键(F8)执行此断点到最后,进入下一个断点开始之处. 快捷键(F5)单步执行程序,遇到方法时进入. 快捷键(F7)单步执行程序,从当前方法跳出.

  6. 如何用myeclispe远程调试tomcat

    如何用myeclispe远程调试tomcat 在工作开发中,通常用本机进行代码编写,然后将编好的工程部署到测试服务器进行测试.往往测试服务器并不是自己的本机,因此对调试带来众多不便.今天学习可以用my ...

  7. APP下载页面(支持微信扫一扫)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  8. Tree HDOJ--2682

    Tree Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  9. 类和对象:一些相关的BIF - 零基础入门学习Python040

    类和对象:一些相关的BIF 让编程改变世界 Change the world by program 一些类和对象相关的 BIF 今天我们来谈谈跟类和对象相关的一些BIF(内置函数): issubcla ...

  10. Java迭代器[转]

    迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的.只要拿到这个对象,使用迭代器就可以遍历这个对象的内部. 1.Iterator ...