# JunoYi-Tenant **Repository Path**: juno-yi/junoyi-saas ## Basic Information - **Project Name**: JunoYi-Tenant - **Description**: JunoYi 系列后台管理脚手架框架 Java多租户版本后端:内置完善的基础设施能力,面向企业级业务场景设计;限与菜单彻底解耦,推翻传统权限设计,采用 RBAC + ABAC + 权限节点 DSL + 运行时策略引擎,更灵活强大;支持多端接入,一套代码多端适配;权内置安全机制与接口端到端加密,让开发者专注业务而非基础防护。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-01 - **Last Updated**: 2026-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README
JunoYi Logo
[![Java](https://img.shields.io/badge/Java-21-orange.svg)](https://www.oracle.com/java/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot-3.5.0-brightgreen.svg)](https://spring.io/projects/spring-boot) [![MyBatis Plus](https://img.shields.io/badge/MyBatis%20Plus-3.5.9-blue.svg)](https://baomidou.com/) [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Version](https://img.shields.io/badge/Version-1.0.0--beta-yellow.svg)](https://github.com/Juno-Yi/JunoYi) [![Architecture](https://img.shields.io/badge/Architecture-Multi--Tenant-orange.svg)](https://github.com/Juno-Yi/JunoYi) ## JunoYi 后台管理系统脚手架框架(多租户版) **一个安全内建、简洁优雅的 Java 企业级 SaaS 多租户开发框架** [特性](#-核心特性) • [快速开始](#-快速开始) • [文档](#-文档) • [架构](#-项目架构) • [贡献](#-贡献指南) • [联系我们](#-联系我们) 📖 [文档站](https://doc.framework.junoyi.com) • 🎮 [演示站](https://demo.junoyi.com)
--- > **🎉 多租户版本发布** > > 当前版本为 **1.0.0-beta**,基于单体版本 v0.5.3 架构开发的独立多租户版本,适用于 SaaS 应用场景。 > > ✅ **版本特性** > - 完整的多租户数据隔离 > - 租户级别的权限管理 > - 灵活的租户套餐配置 > - 支持租户独立配置 > - 基于单体架构,部署简单 > > 📌 **版本说明** > - 多租户版本独立维护,版本号从 v1.0.0-beta 开始 > - 单体版本继续独立迭代(当前 v0.5.3) > - 两个版本线各自独立发展 > > 📌 **相关链接** > - 📖 文档站:https://doc.framework.junoyi.com > - 🎮 演示站:https://demo-saas.junoyi.com > > 演示站账号: > > 平台超级管理员 - 账号:platform_admin 密码:admin123 > > 租户管理员(租户A) - 账号:tenant_a_admin 密码:admin123 > > 租户管理员(租户B) - 账号:tenant_b_admin 密码:admin123 --- ## 🗓️ 版本介绍规划 项目提供多个版本线,各自独立维护和迭代: | 版本类型 | 当前版本 | 版本号规则 | 说明 | 状态 | |--------|--------|--------|------|------| | 单体版 | v0.5.3 | v0.x.x | 适合中小型项目,快速开发 | 🚀 持续迭代 | | 多租户版 | v1.0.0 | v1.x.x | 当前版本,支持 SaaS 多租户架构 | 🚀 正式版 | | 微服务版 | 规划中 | v2.x.x | 基于 Spring Cloud 的分布式架构 | 📋 规划中 | **版本说明:** - 各版本线独立维护,互不影响 - 单体版继续迭代优化(v0.5.x → v0.6.x → ...) - 多租户版从 v1.0.0-SAAS 开始独立发展 - 微服务版规划从 v2.0.0-CLOUD 开始 📝 更新日志: - 单体版:https://doc.framework.junoyi.com/changelog/standalone.html - 多租户版:https://doc.framework.junoyi.com/changelog/saas.html --- ## 📖 项目介绍 JunoYi(钧逸)多租户版是一个基于 **Spring Boot 3.5.0** 和 **Java 21** 打造的现代化企业级 SaaS 多租户应用开发框架。在单体版本的基础上,新增完整的多租户架构支持,提供更全面、更成熟、更可扩展的 SaaS 基础设施能力。 ### ✨ 核心优势 - **完整的多租户架构 :** 支持租户数据隔离、租户配置管理、租户套餐体系,满足 SaaS 应用的核心需求。 - **灵活的数据隔离策略 :** 支持共享数据库共享表(字段隔离)、共享数据库独立表、独立数据库三种隔离模式,可根据业务需求灵活选择。 - **租户级权限管理 :** 在原有混合权限模型基础上,增加租户维度的权限控制,支持平台管理员和租户管理员双层管理。 - **企业级基础设施完善 :** 内置统一规范的架构设计、模块划分与扩展机制,显著降低 SaaS 项目搭建与长期维护成本。 - **多端原生支持,一套代码多端适配 :** 天然支持 Web前台 / Web后台 / 移动端 / 小程序 / 桌面端多端接入,统一接口规范,降低多端协作成本。 - **安全能力内置,端到端加密通信 :** 内置接口级安全防护机制,实现端到端数据加密,让系统从架构层面更安全、更可靠。 - **基于单体架构开发 :** 保持单体架构的简洁性,部署运维成本低,适合中小型 SaaS 应用快速上线。 --- ## 🚀 快速开始 ### 环境要求 | 软件 | 版本要求 | 说明 | | --- | --- |---------------| | Java | 21 | 后端运行环境 | | Maven | 3.9+ | 后端打包构建环境 | | MySQL | 8.0+ | SQL 数据库 | | Redis | 7.0+ | 缓存数据库 | | IDEA | 2024.x | Java 开发工具(可选) | | Navicat | 任意 | 数据库可视化工具(可选) | | DataGrip | 任意 | 数据库可视化工具(可选)| | Apifox | 任意 | 接口调试工具(可选) | | Postman | 任意 | 接口调试工具(可选) | ### 使用 cli 创建项目工程 JunoYi 提供了官方的脚手架工具 create-junoyi,支持通过 npm、pnpm、yarn 等包管理器快速创建项目。 **使用 pnpm(推荐)** ```bash pnpm create junoyi ``` **使用 npm** ```bash npm create junoyi ``` **使用 yarn** ```bash yarn create junoyi ``` **1. 输入项目名称** 当出现JunoYi大字后,就可以输入项目名称 ``` ██╗██╗ ██╗███╗ ██╗ ██████╗ ██╗ ██╗██╗ ██║██║ ██║████╗ ██║██╔═══██╗╚██╗ ██╔╝██║ ██║██║ ██║██╔██╗ ██║██║ ██║ ╚████╔╝ ██║ ██ ██║██║ ██║██║╚██╗██║██║ ██║ ╚██╔╝ ██║ ╚█████╔╝╚██████╔╝██║ ╚████║╚██████╔╝ ██║ ██║ ╚════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ JunoYi 企业级后台管理开发框架初始化工具 ? 请输入项目名称: (junoyi-admin) ``` 回车默认为junoyi-admin **2. 选择clone的仓库** ```text ? 请选择代码托管平台: (Use arrow keys) > 🚀 Gitee (国内推荐,速度快) 🌍 GitHub ``` **3. 选择架构模式** ```text ? 请选择项目架构: (Use arrow keys) - 🟢 单体架构 - 适合中小型项目,快速开发 > 🟢 多租户架构 - SaaS 应用,支持多租户隔离 - 🟡 微服务架构 - 大型分布式系统,服务解耦 (开发中) 暂未完成 ``` **4. 选择前端模板,并且创建** ```text 请选择前端模板 (空格选择,回车确认): (Press to select, to toggle all, to invert selection, and to proceed) >( ) Vue3 + TypeScript + Element Plus - 基于 Element-Plus 的管理后台UI - 🚧 Vue3 + TypeScript + Ant Design Vue - 基于 Ant Design Vue 的管理后台UI 开发中 - 🚧 Vue3 + uni-app - 跨平台移动端应用 开发中 - 🚧 Flutter - 原生跨平台移动应用 开发中 ``` **5. 检测开发环境(可选)** ```text ? 是否检查开发环境? yes 🔍 检查开发环境: ✓ Java 要求: 21 当前: 21 满足 - 后端运行环境 ✓ Maven 要求: 3.9+ 当前: 3.9 满足 - 后端打包构建 ✗ MySQL 要求: 8.0+ 未安装 未安装 - SQL 数据库 ✗ Redis 要求: 7.0+ 未安装 未安装 - 缓存数据库 ✓ Node.js 要求: 18+ 当前: 22.20.0 满足 - 前端运行环境 ✓ pnpm 要求: 8+ 当前: 10.26.1 满足 - 前端包管理器 ⚠ 提示: 部分环境未满足要求,可能影响项目运行 建议安装或升级相应的软件到推荐版本 ``` > 如果出现显示未安装,可能只是因为这些没有配置系统环境,如果在你的开发环境中,可能有些环境不是本地的,数据远程数据库,其实可以忽略这里提示 **6. 重构初始化项目(二次开发)** ```text ? 是否需要重构初始化项目? (自定义模块名和包名) (y/N) ``` 针对于二次开发,用于自己团队与公司的开发,如果需要指定模块前缀名、软件包名,这里支持使用 `cli` 工具,辅助帮你重构整个项目框架 ```text 🔧 重构模块名... ? 请输入新的模块前缀名: test ``` 输入y后,可以重构模块名,默认为test ```text 🔧 重构包名... ? 请输入新的包名 (如 com.example): (com.example) ``` 重构新的包名,可以输入自定义包名称,默认为com.example **7. 项目工程创建成功** ```text ____ _ / ___| _ _ ___ ___ ___ ___ ___| | \___ \| | | |/ __/ __/ _ \/ __/ __| | ___) | |_| | (_| (_| __/\__ \__ \_| |____/ \__,_|\___\___\___||___/___(_) 接下来的步骤: # 后端项目 cd junoyi-admin 使用 IDEA 打开项目根目录 配置数据库连接信息 运行 Spring Boot 主类启动后端 # 前端项目 cd junoyi-admin/junoyi-ui/vue3-element ``` ### 启动步骤 **1、打开项目** 前端推荐使用 `vscode`、`webstorm`等打开项目,后端推荐使用 `IDEA` 等打开项目,看个人喜爱。 **2、导入数据库** 创建数据库, 将目录 `sql` 中的对应版本的数据库SQL,在工具中导入到数据库中。 确保启动了 Redis缓存数据库 **3、修改 application YAML 配置文件** ```yaml # 文件输出配置 file: # 是否启用文件日志输出 enabled: true # 日志文件存储目录(只提供目录,不包含文件名) path: ./temp/logs # 单个日志文件的最大大小(支持KB、MB、GB单位) max-size: 100MB # 保留的历史日志文件数量(超过数量的旧文件会被删除) max-history: 30 # 所有日志文件的总大小上限(超过后会删除最旧的文件) total-size-cap: 1GB # 是否压缩历史日志文件(true=压缩为.gz格式,false=不压缩) compress: true # 日志文件编码格式 encoding: UTF-8 ``` 将这里日志存储路径 `path` 改为自己的日志存储路径 ```yaml api-encrypt: enable: false # 是否加密请求体 request: true # 是否加密响应体 response: true # 排除路径 exclude-urls: - /swagger-ui/** - /v3/api-docs/** - /doc.html - /webjars/** - /your-custom-path/** - /system/info/logo ``` 确保 `application.yml` 中的接口加密功能保持关闭,开发环境中需要将其设置为关闭,方便调试,生产环境设置为开启 ```yaml url: jdbc:mysql://localhost:3306/junoyi?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true&rewriteBatchedStatements=true username: root password: 123456 ``` 将 `application-local.yml` 中的数据库url改为自己的数据库url,以及将 `username`、`password` 设置为自己的账号密码 ```yaml # ==================== Redis 配置 ==================== data: redis: host: 127.0.0.1 port: 6379 database: 1 timeout: 10s # password: 123456 ``` Redis配置,默认redis是没有密码的,如果有需要自行设置 **4、启动项目** 确保在自己的IDEA环境中,项目使用的 Java 为 Java 17, 找到打开 `junoyi-server` 模块,该模块为项目主入口模块,启动运行打包都在该模块下, `com.junoyi.server` 软件包下 `JunoYiServerApplication` 主类。启动运行主类中的主函数。 或 `maven` 启动 SpringBoot ```bash mvn spring-boot:run ``` **5、成功启动项目** ```text [2026-01-19 17:21:59.032] (main ) c.j.s.JunoYiServerApplica... [INFO] - Started JunoYiServerApplication in 2.985 seconds (process running for 3.228) [2026-01-19 17:21:59.032] (main ) JUNOYI [INFO] - Local: http://localhost:7588 [2026-01-19 17:21:59.032] (main ) JUNOYI [INFO] - External: http://10.18.40.110:7588 [2026-01-19 17:21:59.033] (main ) JUNOYI [INFO] - Host Name: fanzijiandeMacBook-Pro.local [2026-01-19 17:21:59.036] (main ) c.j.s.JunoYiServerApplica... [INFO] - [JunoYi Server] Startup completed. System is now operational. _ _/| \'o.0' =(___)= U ``` 控制台日志输出结果为这样,表示启动成功! 可以通过访问 API 接口文档来测试是否成功运行! ```text http://localhost:7588/doc.html ``` --- ## 📚 文档 完整文档请访问:**https://doc.framework.junoyi.com** | 分类 | 内容 | |------|------| | 🚀 快速开始 | 环境准备、项目启动、基础配置 | | 🏗️ 架构设计 | 项目结构、模块划分、技术选型 | | 🔐 权限系统 | 混合权限模型、RBAC、字段级权限 | | 🛡️ 安全防护 | XSS/SQL注入防护、端到端加密 | | 📝 开发指南 | 模块开发、对象转换、日志框架 | | 🔌 组件集成 | 验证码、API文档、缓存管理 | --- ## 🏗️ 项目架构 ``` JunoYi(多租户版) ├── junoyi-dependencies # 依赖版本管理 ├── junoyi-framework # 框架核心模块 │ ├── junoyi-framework-core # 核心工具类 │ ├── junoyi-framework-web # Web 基础设施 │ ├── junoyi-framework-security # 安全认证 │ ├── junoyi-framework-permission # 权限控制 │ ├── junoyi-framework-datasource # 数据源配置 │ ├── junoyi-framework-redis # Redis 缓存 │ ├── junoyi-framework-captcha # 验证码 │ ├── junoyi-framework-api-doc # API 文档 │ ├── junoyi-framework-log # 日志框架 │ ├── junoyi-framework-tenant # 多租户核心(新增) │ └── ... ├── junoyi-module # 业务模块 │ ├── junoyi-module-system # 系统管理 │ ├── junoyi-module-tenant # 租户管理(新增) │ └── junoyi-module-demo # 示例模块 ├── junoyi-module-api # 模块 API 定义 ├── junoyi-server # 启动入口 └── junoyi-ui # 前端项目 ``` --- ### 整体架构 ```mermaid graph TB subgraph "客户端层 Client Layer" A1[Web前台] A2[Web后台] A3[移动端APP] A4[小程序] A5[桌面端] end subgraph "应用层 Application Layer - junoyi-server" B1[Spring Boot 内嵌 Tomcat
端口: 7588] end subgraph "过滤器链 Filter Chain" C1[CorsFilter
跨域处理] C2[ApiEncryptFilter
API加密解密] C3[XssFilter
XSS防护] C4[SqlInjectionFilter
SQL注入防护] C5[TokenAuthenticationFilter
Token认证] C6[TenantFilter
租户识别与上下文设置] end subgraph "业务模块层 Business Module Layer" D1[junoyi-module-system
系统管理模块] D2[junoyi-module-generation
代码生成模块] D3[junoyi-module-tenant
租户管理模块] D4[junoyi-module-demo
示例模块] D5[junoyi-module-xxx
扩展模块...] end subgraph "API定义层 API Definition Layer" E1[system-api
接口/实体/Mapper] E2[generation-api
接口/实体/Mapper] E3[tenant-api
接口/实体/Mapper] E4[demo-api
接口/实体/Mapper] end subgraph "框架层 Framework Layer" F1[framework-web
Web基础设施] F2[framework-security
安全认证] F3[framework-permission
权限控制] F4[framework-datasource
数据源管理] F5[framework-redis
缓存管理] F6[framework-captcha
验证码] F7[framework-log
日志框架] F8[framework-excel
Excel处理] F9[framework-api-doc
API文档] F10[framework-json
JSON处理] F11[framework-event
事件总线] F12[framework-quartz
定时任务] F13[framework-tenant
多租户核心] F14[framework-core
核心工具] end subgraph "依赖管理层 Dependency Layer" G1[junoyi-dependencies
统一版本管理] end subgraph "基础设施层 Infrastructure Layer" H1[(MySQL 8.0+
主数据库)] H2[(Redis 7.0+
缓存数据库)] H3[本地文件存储
日志/上传文件] end A1 & A2 & A3 & A4 & A5 --> B1 B1 --> C1 --> C2 --> C3 --> C4 --> C5 --> C6 C6 --> D1 & D2 & D3 & D4 & D5 D1 --> E1 D2 --> E2 D3 --> E3 D4 --> E4 E1 & E2 & E3 & E4 --> F1 & F2 & F3 & F4 & F5 & F6 & F7 & F8 & F9 & F10 & F11 & F12 & F13 & F14 F1 & F2 & F3 & F4 & F5 & F6 & F7 & F8 & F9 & F10 & F11 & F12 & F13 & F14 --> G1 F4 --> H1 F5 --> H2 B1 --> H3 ``` --- ### 请求处理流程 ```mermaid sequenceDiagram participant Client as 客户端 participant Filter as 过滤器链 participant Interceptor as 拦截器 participant Controller as 控制器 participant Service as 服务层 participant Mapper as 数据访问层 participant DB as 数据库 participant Redis as 缓存 Client->>Filter: 1. HTTP请求 Filter->>Filter: 2. CORS跨域处理 Filter->>Filter: 3. API加密解密 Filter->>Filter: 4. XSS防护 Filter->>Filter: 5. SQL注入防护 Filter->>Interceptor: 6. Token认证 Interceptor->>Interceptor: 7. 租户识别与上下文设置 Interceptor->>Interceptor: 8. 权限校验 Interceptor->>Interceptor: 9. 访问日志记录 Interceptor->>Controller: 10. 路由到控制器 Controller->>Controller: 11. 参数校验 Controller->>Service: 12. 调用业务逻辑 Service->>Redis: 13. 查询缓存(带租户隔离) alt 缓存命中 Redis-->>Service: 返回缓存数据 else 缓存未命中 Service->>Mapper: 14. 查询数据库(自动添加租户条件) Mapper->>DB: 15. 执行SQL DB-->>Mapper: 16. 返回结果 Mapper-->>Service: 17. 返回数据 Service->>Redis: 18. 更新缓存 end Service-->>Controller: 19. 返回业务结果 Controller-->>Client: 20. 统一响应格式 ``` --- ### 模块依赖关系 ```mermaid graph TB subgraph "启动模块" A[junoyi-server
启动入口] end subgraph "业务模块实现层" B1[junoyi-module-system
系统模块实现] B2[junoyi-module-generation
代码生成实现] B3[junoyi-module-tenant
租户管理实现] B4[junoyi-module-demo
示例模块实现] end subgraph "业务模块API层" C1[junoyi-module-system-api
系统模块API] C2[junoyi-module-generation-api
代码生成API] C3[junoyi-module-tenant-api
租户管理API] C4[junoyi-module-demo-api
示例模块API] end subgraph "框架启动器" D0[junoyi-framework-boot-starter
框架启动核心
聚合所有框架模块] end subgraph "框架模块层" D1[framework-web
Web基础] D2[framework-security
安全认证] D3[framework-permission
权限控制] D4[framework-datasource
数据源] D5[framework-redis
缓存] D6[framework-captcha
验证码] D7[framework-json
JSON] D8[framework-excel
Excel] D9[framework-event
事件] D10[framework-api-doc
API文档] D11[framework-tenant
多租户核心] D12[framework-core
核心工具] end subgraph "依赖管理" E[junoyi-dependencies
统一版本管理] end A --> B1 & B2 & B3 & B4 B1 --> C1 B2 --> C2 B3 --> C3 B4 --> C4 C1 & C2 & C3 & C4 --> D0 D0 --> D1 & D2 & D3 & D4 & D5 & D6 & D7 & D8 & D9 & D10 & D11 D1 & D2 & D3 & D4 & D5 & D6 & D7 & D8 & D9 & D10 & D11 --> D12 D12 --> E style D0 fill:#f9f,stroke:#333,stroke-width:3px ``` **依赖说明**: 1. **junoyi-server** 只依赖业务模块实现(system、tenant、demo 等) 2. **业务模块实现** 依赖对应的 **API 模块** 3. **API 模块** 统一依赖 **framework-boot-starter** 4. **boot-starter** 聚合了所有框架模块,包括新增的 **framework-tenant** 多租户核心模块 5. 所有框架模块最终依赖 **framework-core** 核心模块 6. **dependencies** 统一管理所有模块的版本号 --- ### 框架层详细架构 ```mermaid graph TB subgraph "junoyi-framework-tenant 多租户核心(新增)" T1[租户上下文
TenantContextHolder] T2[租户拦截器
TenantInterceptor] T3[租户数据隔离
TenantLineHandler] T4[租户配置
TenantProperties] T5[租户工具类
TenantUtils] T6[租户缓存
TenantCacheManager] end subgraph "junoyi-framework-web Web基础设施" W1[统一异常处理
GlobalExceptionHandler] W2[跨域配置
CorsConfiguration] W3[XSS防护
XssFilter] W4[SQL注入防护
SqlInjectionFilter] W5[访问日志
AccessLogInterceptor] W6[统一响应封装
Result] end subgraph "junoyi-framework-security 安全认证" S1[JWT Token生成
JwtTokenHelper] S2[Token认证过滤器
TokenAuthenticationFilter] S3[RSA加密解密
RsaCryptoHelper] S4[API加密过滤器
ApiEncryptFilter] S5[密码工具
PasswordUtils] S6[会话管理
SessionHelper] end subgraph "junoyi-framework-permission 权限控制" P1[权限注解
Permission] P2[权限切面
PermissionAspect] P3[权限匹配器
PermissionMatcher] P4[字段权限
FieldPermission] P5[字段脱敏
MaskUtils] P6[权限助手
PermissionHelper] end subgraph "junoyi-framework-datasource 数据源管理" DS1[MyBatis-Plus配置
MyBatisPlusConfig] DS2[分页插件
PaginationInterceptor] DS3[数据权限
DataScopeHandler] DS4[慢SQL监控
SlowSqlInterceptor] DS5[SQL美化
SqlBeautifyInterceptor] DS6[动态数据源
DynamicDataSource] end subgraph "junoyi-framework-redis 缓存管理" R1[Redis工具类
RedisUtils] R2[Redisson配置
RedissonConfig] R3[分布式锁
Lock4j] R4[缓存注解
Cacheable] end subgraph "junoyi-framework-captcha 验证码" CA1[图形验证码
ImageCaptcha] CA2[滑块验证码
SlideCaptcha] CA3[验证码存储
CaptchaStore] CA4[验证码助手
CaptchaHelper] end subgraph "junoyi-framework-log 日志框架" L1[日志配置
JunoYiLoggingConfig] L2[日志工具
JunoYiLog] L3[操作日志
OperationLog注解] L4[日志切面
LogAspect] end subgraph "junoyi-framework-core 核心工具" C1[统一返回
Result] C2[分页对象
PageQuery/PageResult] C3[基础异常
BaseException] C4[工具类
Utils] C5[常量定义
Constants] C6[对象转换
MapStruct] end ``` --- ### 权限系统架构 ```mermaid graph TB subgraph "权限模型 Permission Model" PM1[用户 User] PM2[角色 Role] PM3[权限 Permission] PM4[菜单 Menu] PM5[部门 Dept] PM6[用户组 UserGroup] PM7[角色组 RoleGroup] PM8[权限组 PermGroup] PM9[部门组 DeptGroup] end subgraph "权限关系 Relations" R1[用户-角色
N:N] R2[角色-权限
N:N] R3[用户-权限
N:N 直接授权] R4[用户-部门
N:N] R5[用户-用户组
N:N] R6[角色-角色组
N:N] R7[权限-权限组
N:N] R8[部门-部门组
N:N] end subgraph "权限控制 Access Control" AC1[接口权限
Permission注解] AC2[字段权限
FieldPermission注解] AC3[数据权限
DataScope注解] AC4[菜单权限
Menu Control] end PM1 --> R1 --> PM2 PM2 --> R2 --> PM3 PM1 --> R3 --> PM3 PM1 --> R4 --> PM5 PM1 --> R5 --> PM6 PM2 --> R6 --> PM7 PM3 --> R7 --> PM8 PM5 --> R8 --> PM9 PM3 --> AC1 & AC2 & AC3 PM4 --> AC4 ``` --- ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! ### 贡献流程 1. Fork 本项目 2. 创建新分支 (`git checkout -b feature/AmazingFeature`) 3. 提交更改 (`git commit -m 'Add some AmazingFeature'`) 4. 推送到分支 (`git push origin feature/AmazingFeature`) 5. 提交 Pull Request ### 代码审查 所有 PR 都需要经过代码审查才能合并。请确保: - 代码符合项目规范 - 添加了必要的测试 - 更新了相关文档 - 通过了所有 CI 检查 --- ## 📞 联系我们 如果你在使用过程中遇到问题,或者有任何建议,欢迎通过以下方式联系我们: - **QQ 群**:1074033133 - **邮箱**:eatfan0921@163.com
QQ群二维码

扫码加入 QQ 群

--- ## ☕ 捐赠赞助 如果这个项目对你有帮助,欢迎请作者喝杯咖啡 ☕
微信收款码
微信
支付宝收款码
支付宝
--- ## 📄 许可证 本项目采用 MIT 许可证 - 详见 [LICENSE](LICENSE) 文件 --- [![Star History Chart](https://api.star-history.com/svg?repos=Juno-Yi/JunoYi&type=date&legend=top-left)](https://www.star-history.com/#Juno-Yi/JunoYi&type=date&legend=top-left) --- ## 🔗 相关项目 **单体版前端:** - [JunoYi 单体版前端 Github](https://github.com/Juno-Yi/JunoYi-Vue-ElementPlus) - 单体版配套前端 - [JunoYi 单体版前端 Gitee](https://gitee.com/juno-yi/juno-yi-vue-element-plus) - 单体版配套前端 **多租户版前端:** - [JunoYi 多租户版前端 Github](https://github.com/Juno-Yi/JunoYi-Vue-ElementPlus-SAAS) - 多租户版配套前端 - [JunoYi 多租户版前端 Gitee](https://gitee.com/juno-yi/juno-yi-vue-element-plus-saas) - 多租户版配套前端 ---
**⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!** Made with ❤️ by JunoYi Team