From 0899b1b813f5e8e5f682399e5a893e14108d7db7 Mon Sep 17 00:00:00 2001 From: clay <20932067@zju.edu.cn> Date: Sun, 29 Jan 2023 16:56:52 +0800 Subject: [PATCH] =?UTF-8?q?clay=20commit=20:=20tree=3Dutil=E4=BD=BF?= =?UTF-8?q?=E7=94=A8,sentinel=20dashboard=E7=AE=80=E4=BB=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/module/auth/README.md | 10 ++++++++- docs/module/umps/README.md | 17 ++++++++++----- docs/module/visual/README.md | 4 +++- docs/wiki/back-build/README.md | 6 +++--- docs/wiki/introduce/README.md | 37 ++++++++++++++++++++++++++++++++- docs/wiki/introduce/cicd.png | Bin 0 -> 23424 bytes docs/wiki/introduce/jiagou.png | Bin 0 -> 27389 bytes 7 files changed, 63 insertions(+), 11 deletions(-) create mode 100644 docs/wiki/introduce/cicd.png create mode 100644 docs/wiki/introduce/jiagou.png diff --git a/docs/module/auth/README.md b/docs/module/auth/README.md index c356f9e..79f5193 100644 --- a/docs/module/auth/README.md +++ b/docs/module/auth/README.md @@ -1,2 +1,10 @@ # 授权服务模块 -为整个集群提供授权登录服务,先阶段实现账号密码登录,后续可以扩展实现微信登录,微信扫码登录,QQ等第三方登录方式 +## 服务简介 +授权登录服务是集群权限授权的入口,集群中的所有授权请求读应该在当前服务进行实现. + +## 提供服务 +- 验证码获取 +- 账号密码登录 +- 微信小程序授权登录(规划中) +- 用户登录后用户权限标识和用户信息获取 + diff --git a/docs/module/umps/README.md b/docs/module/umps/README.md index 5816117..61f1697 100644 --- a/docs/module/umps/README.md +++ b/docs/module/umps/README.md @@ -1,8 +1,15 @@ # 通用用户权限管理模块 -通用用户权限管理模块主要集成用户管理,角色管理,菜单管理,部门管理,岗位管理,字典管理,字典类型配置,在线用户管理等 +## 服务简介 +通用用户权限模块为集群中的核心,集群中的系统基础服务的在此实现 -## umps-api rpc api服务模块 -为集群远程rpc 实体对象和fegin 的远程接口调用 +## 提供服务 +- 用户管理 +- 角色管理 +- 菜单管理 +- 部门管理 +- 岗位管理 +- 字典管理 +- 字典类型配置 +- 在线用户管理 +- fegin rpc远程调用api服务 -## umps-biz 业务服务模块 -提供真实的业务需求,对用户管理,角色管理,菜单管理,部门管理,岗位管理,字典管理,字典类型配置,在线用户管理等服务的具体实现 diff --git a/docs/module/visual/README.md b/docs/module/visual/README.md index 7750804..fcb7c1b 100644 --- a/docs/module/visual/README.md +++ b/docs/module/visual/README.md @@ -8,7 +8,9 @@ - sentinel-dashboard-pro -- sentinel监控面板,配置规则同步到nacos管理 ## code-gen(正在开发) -提供数据库数据源的配置,支持mysql,MariaDB,以及oracle三种数据库 +为提高集群编码效率,可以快速生成crud后端代码和配套的前端页面代码,以数据库元数据作为数据基础是. + +在集群模式下每一个服务所在的数据库地址不同,数据库不同,甚至数据库类型不同,所以提供数据库数据源的配置,支持mysql,MariaDB,以及oracle三种数据库 支持可视化的代码生成配置,并且根据数据源不同生成对应数据库的标准curd代码 diff --git a/docs/wiki/back-build/README.md b/docs/wiki/back-build/README.md index f30e9d4..062a126 100644 --- a/docs/wiki/back-build/README.md +++ b/docs/wiki/back-build/README.md @@ -1,5 +1,5 @@ # 后端部署 ## 需要部署的内容 -- auth -- gateway -- umps +- auth 权限认证模块 +- gateway 网关服务模块 +- umps 系统用户权限管理模块 diff --git a/docs/wiki/introduce/README.md b/docs/wiki/introduce/README.md index bfd470d..1266d6d 100644 --- a/docs/wiki/introduce/README.md +++ b/docs/wiki/introduce/README.md @@ -1 +1,36 @@ -# 介绍 +# 项目简介 + +## 项目背景 +互联网对高并发集群的需求愈发的变大,spring boot 的单体应用已经不满足于现在复杂的业务需求,spring cloud逐渐成为高并发集群的标杆,学习spring cloud也刻不容缓, +该项目是在学习了spring cloud中各种组件之后,为锻炼自己的集群能力,并且自己也想做一套集群的基础权限管理系统。 + +该集群为一套基础的权限管理系统,主导权限控制,权限管理等核心功能,并且配合配合visual(图形化管理模块)对集群的资源进行更方便的关系,提高软件开发的效率。 + +## 系统说明 +- 基于 Spring Cloud 2021 、Spring Boot 2.7、 Spring Security 的权限管理系统 +- 采用前后端分离的模式,前端(基于 Security-React, Security-Vue) +- 注册中心,配置中心使用Nacos, +- 权限认证使用Spring Security + Redis +- 流量控制使用Sentinel +- gitea+drone+harbor+rancher全套部署流程 + +## 核心依赖 + +| 依赖 | 版本 | +|----------------------|------------| +| Spring Boot | 2.7.5 | +| Spring Cloud | 2021.0.5 | +| Spring Cloud Alibaba | 2021.0.4.0 | +| Mybatis | 3.5.2 | +| Vue | 3.1.3 | +| React | 3.1.3 | + +## 软件相关架构 +![](./jiagou.png) + +- 集群通过gateway作为集群的唯一入口,然后访问到授权中心等其他服务,服务之间授权则使用`@inner`注解加上aop标识 + +## CI/CD +![](./cicd.png) + + diff --git a/docs/wiki/introduce/cicd.png b/docs/wiki/introduce/cicd.png new file mode 100644 index 0000000000000000000000000000000000000000..3bbd4bdd35bd5047bc34369652e69bc6fdc5bba3 GIT binary patch literal 23424 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

s9`Vx4Tc&i_ zr~8YKKFiq#=hz_bj<)nIZEJ2;Qc;OC+Rm7FB-=*Ihgd5~g7q_kz~Kk`9(YoOhx^;A zc;5y*xXXtQT~NR}?Q>IaJeZS~0h&-TRhW~NH7LfTra~93zK~%@CiBh@*ig4tauML$ zaL2Qem1}lv-;S4onR2dSC6_k#;k&r1@tWjSi6Lk%4S{K7HZ%|UcAI+SHN&(yRJ%X4m#X*^YZVj6=jx_trW2wtKcYu6ufmh_$5-R( zw|zbV1rQ^1we`>bx~DtcSmtxCcjwlXr`ac(zE`39bXTy)PrfHwksxAz^?YS)#K$Up z&#I89mR|^HpX&xFvC$HCYIVD1cx2>rqZ6)(#R4059DF+m4xWQ7#2?L;-~!(C=n|}C z+#F`UXZ_vRK>OwD|IRu7>7Vwmk$<-$4Y}H@-|71Z#H_W;9onZpyRF4&S-Ea)U0My$cRAdMD|;dHLajxUuMQ8JwCi5`|n;S zOC^%-ZWp01pk=vPwQgk`*WZI^_w;^^4I3bJHg^Y?rA~06Bi6_k?PckaOx`ZUb`lkA zRgza7RFT*?GRGEv4VyETUT%1%Ll-E?GYQ!LunUPCg&$YJz=fwl`444EIAD^4cf9x? DodrcR literal 0 HcmV?d00001 diff --git a/docs/wiki/introduce/jiagou.png b/docs/wiki/introduce/jiagou.png new file mode 100644 index 0000000000000000000000000000000000000000..ca7f46a53ad1ba847d90b32cf3669a8328ebc9ad GIT binary patch literal 27389 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 literal 0 HcmV?d00001