.NET 云原生架构师训练营(权限系统 系统演示 EntityAccess)--学习笔记
目录
- 模块拆分
- EntityAccess
模块拆分
EntityAccess
- 实体权限
- 属性权限
实体权限
创建 student
https://localhost:7018/Student/dotnetnb2
获取 student
https://localhost:7018/Student
对 student 的 permission 做一个保护,创建一个 entitiy 的 permission,create 为 true,delete 和 update 为 false
https://localhost:7018/Permission/entity
参数
{
"key": "student-entity-create",
"group": "ApplicationDbContext",
"displayName": "student-entity-create",
"description": "新增权限",
"resources": [
"DotNetNB.WebApplication.Models.Student"
],
"data": {
"entityName": "DotNetNB.WebApplication.Models.Student",
"create": true,
"delete": false,
"members": [
{
"memberName": "Age",
"update": false
}
]
}
}
创建之后获取一下 permission,可以看到创建的对于 student-entity-create 的一个 action 的 permission
https://localhost:7018/Permission
创建完 permission 之后再创建 student 就会抛出 AuthenticationException 异常,未认证
https://localhost:7018/Student/dotnetnb2
这是通过 dbcontext 在 SavingChangesAsync 的时候由 Intersect 实现的,因为访问接口的时候没有带上 token
if (!createPermission.Intersect(claimValues).Any())
throw new AuthorizationException();
获取 token
https://localhost:7018/Authentication/login
接着把 token 放到创建 student 请求的 headers 之后,会抛出 AuthorizationException 异常,未授权
https://localhost:7018/Student/dotnetnb2
说明已经登录成功,完成认证,但是没有相关权限,因为 token 中没有包含 student-entity-create 的 permission
为用户添加 permission,因为 admin 用户拥有一个 admin 的 role,所以只需要将 permission 添加给 admin 的 role 即可
https://localhost:7018/Permission/addtorole?role=admin&permission=student-entity-create
permission 添加之后需要重新获取 token
https://localhost:7018/Authentication/login
解析 token 可以看到包含 student-entity-create 的 permission
使用这个 token 创建 student 就可以创建成功
https://localhost:7018/Student/dotnetnb2
获取所有 student,可以看到多了一个 dotnetnb2
https://localhost:7018/Student
但是这个 token 没有给 delete 的权限,所以 delete 会抛出 AuthorizationException 异常,未授权
https://localhost:7018/Student/dotnetnb2
因为之前的 permission 中 delete 为 false
"delete": false,
需要再添加一个包含 delete 权限的 permission:student-entity-create-and-delete
https://localhost:7018/Permission/entity
参数
{
"key": "student-entity-create-and-delete",
"group": "ApplicationDbContext",
"displayName": "student-entity-create-and-delete",
"description": "新增删除权限",
"resources": [
"DotNetNB.WebApplication.Models.Student"
],
"data": {
"entityName": "DotNetNB.WebApplication.Models.Student",
"create": true,
"delete": true,
"members": [
{
"memberName": "Age",
"update": false
}
]
}
}
创建之后获取一下 permission,可以看到 student-entity-create-and-delete 的 permission
https://localhost:7018/Permission
直接授权这个 permission 给用户 admin
https://localhost:7018/Permission/addtouser?username=admin&permission=student-entity-create-and-delete
重新获取 token
https://localhost:7018/Authentication/login
解析 token 看到包含 student-entity-create-and-delete
使用这个 token 删除 student 就可以成功
https://localhost:7018/Student/dotnetnb2
获取 student,可以发现 dotnetnb2 已经删除成功了
https://localhost:7018/Student
属性权限
调用接口修改 student 的 age 属性,会抛出 AuthenticationException 异常,未认证
https://localhost:7018/Student/addAge/dotnetnb
登录之后使用 token 请求,会抛出 AuthorizationException 异常,未授权
https://localhost:7018/Student/addAge/dotnetnb
因为之前添加的 permission 对 age 属性不可修改
"members": [
{
"memberName": "Age",
"update": false
}
需要新增一个可以修改 age 属性的 permission
https://localhost:7018/Permission/entity
参数
{
"key": "student-entity-all",
"group": "ApplicationDbContext",
"displayName": "student-entity-all",
"description": "全部权限",
"resources": [
"DotNetNB.WebApplication.Models.Student"
],
"data": {
"entityName": "DotNetNB.WebApplication.Models.Student",
"create": true,
"delete": true,
"members": [
{
"memberName": "Age",
"update": true
}
]
}
}
将该 permission 赋值给 admin,重新获取 token,再调用接口修改 student 的 age 属性
https://localhost:7018/Student/addAge/dotnetnb
修改成功后再获取 student,可以看到 dotnetnb 的 age 从 0 变为 1,修改成功
https://localhost:7018/Student
GitHub源码链接:
https://github.com/MingsonZheng/dotnetnb.security refactor 分支
课程链接
https://appsqsyiqlk5791.h5.xiaoeknow.com/v1/course/video/v_5f39bdb8e4b01187873136cf?type=2
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET 云原生架构师训练营(权限系统 系统演示 EntityAccess)--学习笔记的更多相关文章
- .NET 云原生架构师训练营(建立系统观)--学习笔记
目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...
- .NET 云原生架构师训练营(对象过程建模)--学习笔记
目录 UML OPM OPM优化 UML 1997年发布UML标准 主要域 视图 图 主要概念 结构 静态视图 类图 类.关联.泛化.依赖关系.实现.接口 用例视图 用例图 用例.参与者.关联.扩展. ...
- .NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记
目录 设计原则 设计模式 设计原则 DRY (Don't repeat yourself 不要重复) KISS (Keep it stupid simple 简单到傻子都能看懂) YAGNI (You ...
- .NET 云原生架构师训练营(责任链模式)--学习笔记
目录 责任链模式 源码 责任链模式 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无需关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了 何时使用:在处理 ...
- .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...
- .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...
- .NET 云原生架构师训练营(设计原则与模式)--学习笔记
在复杂系统的架构设计中引入设计原则与模式,能够极大降低复杂系统开发.和维护的成本 目录 几个问题 为什么要学习设计模式 优良架构设计的具体指标 理解复杂系统 面向对象思想(指导复杂系统的分析.设计.实 ...
- .NET 云原生架构师训练营(权限系统 RGCA 开发任务)--学习笔记
目录 目标 模块拆分 OPM 开发任务 目标 基于上一讲的模块划分做一个任务拆解,根据任务拆解实现功能 模块拆分 模块划分已经完成了边界的划分,边界内外职责清晰 OPM 根据模块拆分画出 OPM(Ob ...
- .NET 云原生架构师训练营(权限系统 代码实现 ActionAccess)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
- .NET 云原生架构师训练营(权限系统 代码实现 Identity)--学习笔记
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
随机推荐
- 《剑指offer》面试题36. 二叉搜索树与双向链表
问题描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表.要求不能创建任何新的节点,只能调整树中节点指针的指向. 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜 ...
- 【涨姿势】原来golang的case <-time.After(xxx)还有这样的坑
偶然看到这样一篇文章:<使用 pprof 排查 Golang 内存泄露>https://www.toutiao.com/i6881796351139676680/ 最后一段让我很疑惑: 修 ...
- 【小记录】android下opencv的cv::dft()函数,CPU版本与opencl版本的性能相差16倍
cv::dft 相差15.9倍 cpu版本 单次调用 0.029448 毫秒 opencl版本 单次调用 0.468688 毫秒 差别仅 ...
- Cesium中级教程7 - Geometry and Appearances 几何图形和外观
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 本教程将向您介绍提供使用Primitive API的几何图形和外 ...
- 深度解读SSH免密登录
深度解读SSH免密登录 我们都知道SSH是LINUX下很常用的命令,用来远程登陆其他的LINUX系统.如果只有一台,那也只是一个密码 ,也到还好.但如果是一个集群,每次都输入密码登录,难免会拉低效率. ...
- 【自写信息搜集工具】ThunderSearch开发原理解析
前段时间结合zoomeye的开发文档做了个简易的信息搜集工具ThunderSearch[项目地址 / 博客地址],这次来讲讲具体的实现原理和开发思路 首先要能看懂开发文档,https://www.zo ...
- Java如何对一个对象进行深拷贝
Java如何对一个对象进行深拷贝? Posted by Wudashan on October 14, 2018 深拷贝实现代码:https://github.com/wudashan/java-de ...
- 机器学习-逻辑回归与SVM的联系与区别
(搬运工) 逻辑回归(LR)与SVM的联系与区别 LR 和 SVM 都可以处理分类问题,且一般都用于处理线性二分类问题(在改进的情况下可以处理多分类问题,如LR的Softmax回归用在深度学习的多分类 ...
- Reset the default deployment target in Windows Phone Developer Tools
楼主在更新Windows Phone 8.1 SDK之后遇到一个很烦人的问题,编译选择调试目标列表没有数据.正常情况下都会有一个模拟器列表和真机的选项.肯定又是Preview的bug,问题产生的原因暂 ...
- Programiz 中文系列教程·翻译完成
原文:Programiz 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. 在线阅读 ApacheCN 学习资源 目录 Programiz C ...