.NET 云原生架构师训练营(权限系统 RGCA 开发任务)--学习笔记
目录
- 目标
- 模块拆分
- OPM
- 开发任务
目标
基于上一讲的模块划分做一个任务拆解,根据任务拆解实现功能
模块拆分
模块划分已经完成了边界的划分,边界内外职责清晰
OPM
根据模块拆分画出 OPM(Object Process Methodology)
ActionAccess 模块中的 ActionResourceProvider 会为 RegisterActions 提供支持
Core 模块会对资源进行扫描,扫描之后会得到大量 ResourceModel,将它们持久化到 IResourceStore
IResourceStore 的实现有 DefaultMemoryStore 和 EFResourceStore
ASP .NET Core 的 ActionRequest 会调用 AuthorizeFilter,需要实现一个 DynamicAuthorizeFilter,继承自 AuthorizeFilter
EntityAccess 模块中的 EntityResourceProvider 会为 RegisterEntities 提供支持
EntityResource 同样也需要持久化到 IResourceStore
用户建权需要将 ResourceModel 转换为 PermissionModel,并持久化到 IPermissionStore
IPermissionStore 有一个 EFPermissionStore 的实现
IPermissionStore 需要输入给 SavingChanges 操作
定义一个 SecurityInterceptor,继承自 ISavingChangesInterceptor,提供 SavingChanges
SavingChanges
实体在 DBContext 上执行 SavingChanges 的时候用户需要进行拦截,判断用户是否具有实体增删改的权限
首先需要获取变更实体列表,包括实体的新增、修改、删除
接着需要获取实体权限配置,通过 EntityAccessManager 配置的实体权限
最后根据是否具有实体相应操作的权限执行相应的操作
权限判断
判断是否具有实体相应权限的方式主要是对比 PermissionClaimValue 和 EntityAccessKey
从 EntityAccessList 中的 key 和用户的 claims 进行对比,如果存在则说明用户具有相应的权限
对于实体的字段 memberAccessList 需要遍历每一个实体,把所有 member 拿出来和当前修改的属性名称对比,判断是否有修改的权限
EntityAccessRule 和 MemberAccessRule 是一个一对多的关系
EntityAccessRule 对于表级别的控制有 EntityType,CanCreate,CanDelete 的属性
MemberAccessRule 对于每一个字段有 write 的权限
开发任务
按照模块拆分制定开发任务,可以多人分工协作完成,需要注意模块间是否有依赖,依赖之间的契约是什么,模块的先后顺序,Mock 行为等等
- DotNetNB.Security.Core:定义 core,models,Istore;实现 default memory store
- DotNetNB.Security.ActionAccess:扫描 action;添加 action authorize filter;添加集成方式
- DotNetNB.Security.EntityAccess:扫描 entities;添加 ef savechanges interceptor
- DotNetNB.Security.Store.EntityFramework:基于 mysql 创建 PermissionStore 和 ResourceStore
- DotNetNB.Security.Identity:将权限赋予角色或用户;在用户登录时将 Permissions 写入用户身份 claims
课程链接
https://appsqsyiqlk5791.h5.xiaoeknow.com/v1/course/video/v_5f39bdb8e4b01187873136cf?type=2
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET 云原生架构师训练营(权限系统 RGCA 开发任务)--学习笔记的更多相关文章
- .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 云原生架构师训练营(系统架构)--学习笔记
目录 对外展现的功能 内部功能 功能交互与价值通路 系统架构 目标 认识系统的价值通路 认识功能架构,通过把功能结构与形式结构结合来描述系统架构 受益原则 好的架构必须使人受益,要想把架构做好,就要专 ...
- .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...
- .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...
- .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 ...
随机推荐
- ActiveMQ基础教程(一):认识ActiveMQ
ActiveMQ是Apache软件基金会所研发开源的消息中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. 现在的消息队列有不少,RabbitMQ.Kafka.RocketMQ,Z ...
- 初识python 之 爬虫:爬取双色球中奖号码信息
人生还是要有梦想的,毕竟还有python.比如,通过python来搞一搞彩票(双色球).注:此文仅用于python学习,结果仅作参考.用到知识点:1.爬取网页基础数据2.将数据写入excel文件3.将 ...
- Python常用功能函数系列总结(一)
本节目录 常用函数一:获取指定文件夹内所有文件 常用函数二:文件合并 常用函数三:将文件按时间划分 常用函数四:数据去重 写在前面 写代码也有很长时间了,总觉得应该做点什么有价值的事情,写代码初始阶段 ...
- 方法覆盖 和toString方法的作用
当我们代码怎么编写的时候,在代码级别上构成了方法的覆盖呢? 两个类必须要有继承关系. 重写之后的方法和之前的方法具有:相同的返回值类型 相同的方法名 相同的形参列表 访问权限不能更高,只能更低 重写之 ...
- sql审核-避免离线sql导致的db集群故障
关键词: sql审核.sql审批.sql检查.sql检测.sql执行 离线sql可能会导致的问题 首先,什么是离线sql呢?就是说手动触发执行的这种sql:相对的还有在线sql,位于我们的程序代码中, ...
- Protobuf使用--go和C#
一.Go安装及使用protobuf工具 以下都是基于Linux系统: 1.安装 A) protobuf 编译工具安装 1.下载 protoBuf: cd $GOPATH/src/ git clone ...
- 【linux】Ubuntu20.04使用apt安装tomcat9
Ubuntu20.04使用apt安装tomcat9 前言 系统环境:ubuntu20.04 java版本:openjdk version "11.0.11" 2021-04-20 ...
- SQL语句的分类:DQL、DML、DDL、DCL、TCL的含义和用途
MySQL中提供了很多关键字,将这些关键字 和 数据组合起来,就是常说的SQL语句,数据库上大部分的操作都是通过SQL语句来完成.日常工作中经常听到 DML.DDL语句这些名词,使用字母缩写来表达含义 ...
- gin中multipart/urlencoded表单
package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() r ...
- IoC容器-Bean管理注解方式(组件扫描配置)
4,开启组件扫描细节配置