目录 目标 模块拆分 OPM 开发任务 目标 基于上一讲的模块划分做一个任务拆解,根据任务拆解实现功能 模块拆分 模块划分已经完成了边界的划分,边界内外职责清晰 OPM 根据模块拆分画出 OPM(Object Process Methodology) ActionAccess 模块中的 ActionResourceProvider 会为 RegisterActions 提供支持 Core 模块会对资源进行扫描,扫描之后会得到大量 ResourceModel,将它们持久化到 IResourceSt…
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Security.ActionAccess:扫描 action:添加 action authorize filter:添加集成方式 代码实现 对于一个 web 项目,Filter 是在构建构建 builder 的时候添加的 builder.Services.AddControllers(options =>…
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.WebApplication:创建 ResourceController 和 PermissionController 进行验证 代码实现 ResourceController PermissionController ResourceController 创建 ResourceController,通过…
目录 模块拆分 环境配置 默认用户 ActionAccess 模块拆分 环境配置 mysql migration mysql docker pull mysql docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root@dotnetnb666 -d mysql name:容器名,此处命名为mysql e:配置信息,此处配置mysql的root用户的登陆密码 p:端口映射,此处映射 主机3306端口 到 容器的3306端口 d…
目录 模块拆分 EntityAccess 模块拆分 EntityAccess 实体权限 属性权限 实体权限 创建 student https://localhost:7018/Student/dotnetnb2 获取 student https://localhost:7018/Student 对 student 的 permission 做一个保护,创建一个 entitiy 的 permission,create 为 true,delete 和 update 为 false https://l…
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Security.EntityAccess:扫描 entities:添加 ef savechanges interceptor 代码实现 我们现在已经通过 ActionResourceProvider 完成了 action 的扫描,生成了 ResourceModel,需要持久化到 IResourceStor…
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Security.Identity:将权限赋予角色或用户:在用户登录时将 Permissions 写入用户身份 claims 代码实现 添加一个 Identity 的扩展,将 role 和 Permission 结合到一起 定义 IRolePermissionManager 接口,提供一个 AddRoleP…
2.6.3 RabbitMQ -- HelloWorld 发送端 接收端 rabbitmq container 发送信息 https://www.rabbitmq.com/tutorials/tutorial-one-dotnet.html 新建控制台项目 Sender,Receiver 添加 nuget 包:RabbitMQ.Client 发送端 namespace Sender { class Sender { public static void Main() { var factory…
2.6.8 RabbitMQ -- Masstransit 异常处理 异常处理 其他 高级功能 异常处理 异常与重试 重试配置 重试条件 重新投递信息 信箱 异常与重试 Exception public class SubmitOrderConsumer : IConsumer<SubmitOrder> { public Task Consume(ConsumeContext<SubmitOrder> context) { throw new Exception("Ver…
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, Forms, Rationale/Constraints} 元素.形式/模式.基本原理和限制 为什么需要软件架构? 软件架构的终极目标是用最小的人力成本来满足构建和维护系统的需求 一个软件架构的优劣,可以用它满足用户需求的成本来衡量.如果该成本很低,并且在系统的整个生命周期内一直都维持这样的低成本,那…