diff --git "a/\345\217\262\347\247\200\347\272\242/1.\351\241\271\347\233\256\346\236\266\346\236\204\345\233\276.png" "b/\345\217\262\347\247\200\347\272\242/1.\351\241\271\347\233\256\346\236\266\346\236\204\345\233\276.png" new file mode 100644 index 0000000000000000000000000000000000000000..06c0ac6661b70147af28b05b01be0ac858391648 Binary files /dev/null and "b/\345\217\262\347\247\200\347\272\242/1.\351\241\271\347\233\256\346\236\266\346\236\204\345\233\276.png" differ diff --git "a/\345\217\262\347\247\200\347\272\242/\345\215\232\345\256\242\351\241\271\347\233\256.md" "b/\345\217\262\347\247\200\347\272\242/20240619_\345\215\232\345\256\242\351\241\271\347\233\256.md" similarity index 100% rename from "\345\217\262\347\247\200\347\272\242/\345\215\232\345\256\242\351\241\271\347\233\256.md" rename to "\345\217\262\347\247\200\347\272\242/20240619_\345\215\232\345\256\242\351\241\271\347\233\256.md" diff --git "a/\345\217\262\347\247\200\347\272\242/20240701_\351\241\271\347\233\256\346\236\266\346\236\204.md" "b/\345\217\262\347\247\200\347\272\242/20240701_\351\241\271\347\233\256\346\236\266\346\236\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..c53f2a8159d015169581ff5ce358efcb7bf0d54c --- /dev/null +++ "b/\345\217\262\347\247\200\347\272\242/20240701_\351\241\271\347\233\256\346\236\266\346\236\204.md" @@ -0,0 +1,28 @@ +### .Api +向外提供服务的接口层 + +### .Application +服务层/应用层 + +### .Application.Contracts +应用接口层/Dto + +### .Domain +领域层/核心层 +![alt text](20240701172527.png) + +### .EntityFrameworkCore/.Depper +ORM工具层 + +### .Infrastructure +基础设施层 + + +### DDD(领域驱动设计) +1. DDD(领域驱动设计 Domain-Dirven-Design),是一种用于复杂的业务系统的设计方法论,旨在通过建立领域模型来缩小业务需求与实现技术之间的差距。 + + + + + + diff --git "a/\345\217\262\347\247\200\347\272\242/20240702_RBAC\346\250\241\345\236\213.md" "b/\345\217\262\347\247\200\347\272\242/20240702_RBAC\346\250\241\345\236\213.md" new file mode 100644 index 0000000000000000000000000000000000000000..99dfb1b188c65a7994b113fa01f150f5c8aadd83 --- /dev/null +++ "b/\345\217\262\347\247\200\347\272\242/20240702_RBAC\346\250\241\345\236\213.md" @@ -0,0 +1,26 @@ +### RBAC + +1. RBAC 是什么? + +``` +Role-Based Access Control,中文意思是:基于角色(Role)的访问控制。这是一种广泛应用于计算机系统和网络安全领域的访问控制模型。 +``` + +2. RBAC 的优点和缺点 + +``` +a.RBAC模型的优点: +1.简化权限管理:RBAC模型通过将权限分配给角色,再将角色分配给用户,使得权限管理更加灵活和易于管理。管理员可以通过调整角色和用户之间的关系,来分配和撤销权限,而无需直接管理每个用户的权限。 +灵活的角色与权限关系:RBAC模型支持多对多的角色与权限关系,即一个角色可以拥有多个权2限,一个权限也可以被多个角色所共享。这种灵活性使得RBAC适用于各种复杂的权限管理需求。 +3.提高安全性:RBAC模型可以确保用户只有所需的权限,并提供了良好的隔离性。通过严格控制权限的分配,可以减少系统中的安全漏洞和潜在的攻击风险。 +4.易于扩展和维护:由于RBAC模型使用了基于角色的抽象概念,当系统需要进行扩展或调整时只需修改角色的权限分配,而无需改变具体的用户权限。 + + +b.RBAC模型的缺点 +1.复杂性:尽管RBAC模型提供了灵活的权限管理机制,但其本身也较为复杂。设计和实施RBAC系统需要仔细考虑角色的定义、权限的分配以及用户与角色之间的关系,需要进行详细的规划和配置。 +2.难以处理特殊情况:RBAC模型对于不同角色的用户可能存在某些特殊需求或特权,如临时提升权限、临时改变角色等,这些特殊情况可能难以通过RBAC模型来满足, +3.高度依赖角色设计:RBAC模型的有效性和安全性高度依赖于正确定义和管理角色。如果角色设计不合理或者角色权限分配不当,可能导致系统中出现权限过度或权限不足的问题。 +4.难以适应复杂场景:在某些复杂的业务场景下,RBAC模型可能无法满足需求。例如,需要考虑时间约束、地域约束、审批流程等其他因素时,RBAC模型的简单角色与权限关系可能显得不够灵活和细粒度。 +``` + +![alt text](e35230a6128e475bbbec7f1a773bd4bc.png) diff --git "a/\345\217\262\347\247\200\347\272\242/20240703_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md" "b/\345\217\262\347\247\200\347\272\242/20240703_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md" new file mode 100644 index 0000000000000000000000000000000000000000..33864c61fd5249756a5fa5ac4428cc15fc1d122c --- /dev/null +++ "b/\345\217\262\347\247\200\347\272\242/20240703_\350\277\236\346\216\245\346\225\260\346\215\256\345\272\223.md" @@ -0,0 +1,28 @@ +### 连接 PostgreSQL 数据库 + +1. 连接远程服务器 +2. 配置相关的依赖 + +### ABP vNext + +ABP vNext 框架是一个集成多个第三方组件类库的一个应用程序集,遵循 模块化(Module) 思想实践的最佳方式。基于 ASP.NET Core 的开源 Web 应用程序框架,它继承了 ABP 框架的精髓并进行了大量的改进和扩展。 + +1. ABP vNext 的特点 + 模块化与插件化:ABP vNext 强调模块化设计,允许开发者将系统拆分成多个独立命名且可独立访问的模块。每个模块可以独立开发、测试,最后组装成完整的软件,提高了系统的可维护性和可扩展性。 + 多租户支持:框架内置了多租户支持,使得开发者可以轻松地构建支持多租户的应用程序。 + 领域驱动设计(DDD):ABP vNext 遵循 DDD 原则,将系统划分为领域层、应用层、基础设施层等,有助于构建复杂且易于维护的系统。 + 快速开发:提供了丰富的代码生成工具、模板和库,加速了开发过程,降低了开发成本。 + 稳定性与可靠性:经过多年的开源沉淀和社区支持,ABP vNext 具有良好的稳定性和可靠性。 +2. ABP vNext 的架构 + 领域层(Domain Layer):包含实体、值对象、领域服务、仓储接口等,是系统的核心部分。 + 应用层(Application Layer):承接 UI 和领域层的中间层,负责处理业务逻辑,接收用户请求并返回响应。 + 基础设施层(Infrastructure Layer):包含数据访问、消息队列、缓存等基础设施组件的实现。 + 表示层(Presentation Layer):包括 MVC、Razor Pages、Blazor 等前端技术,用于展示数据和接收用户输入。 +3. 模块化设计 + 模块独立性:每个模块都有自己独立的命名空间、依赖关系和生命周期。 + 模块依赖:模块之间可以相互依赖,但依赖关系应该是明确的和可控的。 + 模块插件化:允许开发者通过插件的方式动态地添加或移除模块,提高了系统的灵活性和可扩展性。 + 四、使用场景 + 企业级应用:适用于构建复杂的企业级应用,如 ERP、CRM 等。 + SaaS 应用:支持多租户,适合构建 SaaS 应用。 + 微服务架构:提供了微服务架构的支持,可以轻松地构建分布式系统。 diff --git "a/\345\217\262\347\247\200\347\272\242/20240704_Flunt Api.md" "b/\345\217\262\347\247\200\347\272\242/20240704_Flunt Api.md" new file mode 100644 index 0000000000000000000000000000000000000000..fe1ffbc7914124718f42a6b37a0bcce899d5e008 --- /dev/null +++ "b/\345\217\262\347\247\200\347\272\242/20240704_Flunt Api.md" @@ -0,0 +1,17 @@ +### Fluent API 的笔记 +1. 简介 +Fluent API 是一种用于构建和配置软件应用的接口设计方法,它通过链式方法调用来实现代码的流畅性和易读性。Fluent API 通常用于构建领域特定语言(DSL),使得代码更加直观和易于理解。在许多现代编程语言中,如C#、Java和JavaScript等,Fluent API 都得到了广泛应用。 + +2. 特点 +2.1 链式调用 +Fluent API 的核心特性是链式调用,即每个方法调用都返回一个对象,该对象可以继续调用其他方法。这种方式使得代码编写更加直观,逻辑更加清晰。 + +2.2 易于阅读和维护 +由于链式调用的特性,Fluent API 使得代码更加易于阅读和维护。开发者可以快速理解代码的功能和逻辑,从而提高开发效率。 + +2.3 扩展性 +Fluent API 具有良好的扩展性,可以通过添加新的方法来扩展API的功能,而不会影响到现有代码。 + +3. 实现方法 +3.1 方法返回对象 +要实现链式调用,每个方法都需要返回一个对象。这个对象可以是当前对象本身,也可以是另一个对象。 \ No newline at end of file diff --git "a/\345\217\262\347\247\200\347\272\242/20240705_\351\241\271\347\233\256\347\232\204\345\237\272\346\234\254\346\236\266\346\236\204.md" "b/\345\217\262\347\247\200\347\272\242/20240705_\351\241\271\347\233\256\347\232\204\345\237\272\346\234\254\346\236\266\346\236\204.md" new file mode 100644 index 0000000000000000000000000000000000000000..c4b355fee3f634bd869e881e5fe649bae6723567 --- /dev/null +++ "b/\345\217\262\347\247\200\347\272\242/20240705_\351\241\271\347\233\256\347\232\204\345\237\272\346\234\254\346\236\266\346\236\204.md" @@ -0,0 +1,61 @@ +### 创建接口并配置实体类 + +``` +namespace Admin2024.Application.Contracts; +public interface IAppUserServices +{ + //登录 + void Login(string name, string password); + //登出 + void OutLogin(string token); + //分配角色To用户 + void AllocateRoleToUser(AppUserCreateDto createDto); + //禁用 + void DisableUser(); + //删除 + void DeleteUser(); + //更新 + void UpdateUser(AppUserUpdateDto updateDto); + + //修改密码 + void AlterPassword(string password); + + + + +} + + +``` + +``` + +public async Task Registry(CreateAppUserDto createAppUserDto) + { + if (createAppUserDto.Password == createAppUserDto.ConfirmPassword) + { + var appUser = new AppUser + { + Username = createAppUserDto.Username, + Password = createAppUserDto.Password, + Salt="盐", + Nickname="天天开心", + Telephone="3389", + QQ="3848", + Weixin="richar", + Avatar="没有头像" + }; + appUser.Registry(); + var res = await _appReposiotry.CreateAsync(appUser); + var dto = new AppUserDto + { + Id = res.Id, + Username = res.Username, + Password = res.Password + }; + + return dto; + } + return null; + } +``` diff --git "a/\345\217\262\347\247\200\347\272\242/e35230a6128e475bbbec7f1a773bd4bc.png" "b/\345\217\262\347\247\200\347\272\242/e35230a6128e475bbbec7f1a773bd4bc.png" new file mode 100644 index 0000000000000000000000000000000000000000..f46472e896dd2dae5a4aabd29c4515472f85c580 Binary files /dev/null and "b/\345\217\262\347\247\200\347\272\242/e35230a6128e475bbbec7f1a773bd4bc.png" differ diff --git "a/\345\217\262\347\247\200\347\272\242/image.png" "b/\345\217\262\347\247\200\347\272\242/image.png" new file mode 100644 index 0000000000000000000000000000000000000000..0f8a8f0d4366c6d46fa8526df0f418b1289cb558 Binary files /dev/null and "b/\345\217\262\347\247\200\347\272\242/image.png" differ