Browse Source

增加自动权限方案

master
hejl 3 days ago
parent
commit
5d4b86e484
  1. 339
      gofaster/ROUTE_SYNC_DESIGN.md

339
gofaster/ROUTE_SYNC_DESIGN.md

@ -0,0 +1,339 @@ @@ -0,0 +1,339 @@
# 前后台路由同步与菜单权限管理系统设计方案
## 1. 项目概述
### 1.1 需求背景
- 前后台都有路由对象,程序启动时能自动同步路由与数据库数据
- 前台程序启动时自动建立前后台路由关系并写入数据库
- 提供界面创建前台菜单,支持层级关系、菜单名称、前台路由对象
- 每次创建菜单时自动创建两条授权资源(数据读、数据编辑)
### 1.2 设计目标
- 实现前后台路由的自动化同步
- 建立菜单与权限资源的自动绑定
- 提供可视化的菜单管理界面
- 支持动态菜单定制和权限分配
## 2. 系统架构设计
### 2.1 整体架构图
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前台应用 │ │ 路由同步服务 │ │ 后台数据库 │
│ (Vue + Router)│◄──►│ (Node.js/Go) │◄──►│ (MySQL/PostgreSQL)│
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 菜单管理界面 │ │ 权限资源管理 │ │ 角色权限分配 │
│ (Vue组件) │ │ (自动生成) │ │ (RBAC) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
### 2.2 核心组件
- **路由解析器**: 解析Vue Router配置,提取路由元信息
- **同步服务**: 管理前后台路由的同步逻辑
- **菜单管理器**: 提供菜单的CRUD操作界面
- **权限生成器**: 自动生成菜单对应的权限资源
## 3. 数据模型设计
### 3.1 扩展数据模型
#### Menu (菜单表)
```go
type Menu struct {
model.BaseModel
Name string `json:"name"` // 菜单名称
Path string `json:"path"` // 前台路由路径
Component string `json:"component"` // Vue组件路径
Icon string `json:"icon"` // 图标
Sort int `json:"sort"` // 排序
ParentID *uint `json:"parent_id"` // 父菜单ID
Level int `json:"level"` // 菜单层级
IsVisible bool `json:"is_visible"` // 是否可见
IsExternal bool `json:"is_external"` // 是否外部链接
Meta string `json:"meta"` // 元数据(JSON)
}
```
#### RouteMapping (路由映射表)
```go
type RouteMapping struct {
model.BaseModel
FrontendRoute string `json:"frontend_route"` // 前台路由路径
BackendRoute string `json:"backend_route"` // 后台API路径
HTTPMethod string `json:"http_method"` // HTTP方法
ResourceID uint `json:"resource_id"` // 关联的资源ID
MenuID uint `json:"menu_id"` // 关联的菜单ID
}
```
#### MenuResource (菜单资源关联表)
```go
type MenuResource struct {
MenuID uint `gorm:"primaryKey"`
ResourceID uint `gorm:"primaryKey"`
}
```
### 3.2 现有模型扩展
在现有的 `Resource` 模型中添加菜单相关字段:
```go
type Resource struct {
// ... 现有字段 ...
MenuID *uint `gorm:"index" json:"menu_id"` // 关联的菜单ID
IsMenu bool `gorm:"default:false" json:"is_menu"` // 是否为菜单资源
}
```
## 4. 技术实现方案
### 4.1 路由同步机制
#### 方案A: 编译时同步 (推荐)
**优势:**
- 性能更好,启动时无需额外处理
- 与构建流程集成,自动化程度高
- 支持热重载开发环境
**实现方式:**
1. 开发 Vite 插件,在构建时解析路由配置
2. 生成路由元数据文件 (routes-meta.json)
3. 应用启动时读取元数据并与数据库同步
**技术选型:**
- Vite 插件: `@vitejs/plugin-vue` + 自定义插件
- 路由解析: `@babel/parser` + AST 分析
- 元数据格式: JSON Schema
#### 方案B: 运行时同步
**优势:**
- 实现简单,无需构建工具集成
- 支持动态路由变更
- 开发调试方便
**实现方式:**
1. 应用启动时读取当前路由配置
2. 与数据库中的路由记录对比
3. 自动创建/更新/删除路由记录
### 4.2 前后台路由关系建立
#### 路由解析器实现
```javascript
// 路由元数据生成示例
const routeMeta = {
path: '/user-management',
name: 'UserManagement',
component: 'UserManagement',
apis: [
{ path: '/api/users', method: 'GET', operation: 'read' },
{ path: '/api/users', method: 'POST', operation: 'create' },
{ path: '/api/users/:id', method: 'PUT', operation: 'update' },
{ path: '/api/users/:id', method: 'DELETE', operation: 'delete' }
]
}
```
#### API映射策略
1. **组件扫描**: 扫描Vue组件文件,识别API调用
2. **模式匹配**: 使用正则表达式匹配API调用模式
3. **手动配置**: 提供配置文件支持手动映射
### 4.3 菜单创建与权限资源自动生成
#### 菜单创建流程
```
用户创建菜单 → 验证路由有效性 → 创建菜单记录 → 自动生成权限资源 → 建立关联关系
```
#### 权限资源自动生成规则
- **数据读权限**: 自动创建,命名规则: `{菜单名}:read`
- **数据编辑权限**: 根据菜单类型自动创建,命名规则: `{菜单名}:edit`
- **自定义权限**: 支持手动添加其他类型权限
#### 权限资源示例
```go
// 用户管理菜单的自动生成权限
{
Name: "用户管理-数据读",
Code: "user_management:read",
Type: "data",
Action: "read"
},
{
Name: "用户管理-数据编辑",
Code: "user_management:edit",
Type: "data",
Action: "edit"
}
```
## 5. 界面设计
### 5.1 菜单管理界面
- **菜单树形结构**: 支持拖拽排序、层级管理
- **菜单属性编辑**: 名称、路径、图标、排序等
- **路由选择器**: 从现有路由中选择或创建新路由
- **权限预览**: 显示菜单关联的权限资源
### 5.2 路由同步状态界面
- **同步状态**: 显示前后台路由的同步状态
- **差异对比**: 高亮显示需要同步的路由
- **手动同步**: 支持手动触发同步操作
- **同步日志**: 记录同步操作的详细日志
## 6. 实现步骤
### 第一阶段: 数据模型扩展 (1周)
- [ ] 设计并创建新的数据表结构
- [ ] 编写数据库迁移脚本
- [ ] 更新后端模型和API
- [ ] 创建基础的数据访问层
### 第二阶段: 路由同步服务 (1-2周)
- [ ] 开发路由解析器
- [ ] 实现路由同步逻辑
- [ ] 集成到应用启动流程
- [ ] 编写同步状态管理
### 第三阶段: 菜单管理界面 (1-2周)
- [ ] 开发菜单管理组件
- [ ] 实现菜单CRUD操作
- [ ] 集成权限资源自动生成
- [ ] 实现菜单树形结构
### 第四阶段: 测试与优化 (1周)
- [ ] 功能测试
- [ ] 性能测试和优化
- [ ] 用户界面优化
- [ ] 文档编写
## 7. 技术选型
### 7.1 前端技术栈
- **框架**: Vue 3 + Composition API
- **UI库**: Element Plus (现有)
- **状态管理**: Pinia (现有)
- **路由**: Vue Router 4 (现有)
- **构建工具**: Vite (现有)
### 7.2 后端技术栈
- **语言**: Go (现有)
- **ORM**: GORM (现有)
- **数据库**: MySQL/PostgreSQL (现有)
- **权限系统**: RBAC (现有)
### 7.3 开发工具
- **路由解析**: @babel/parser, @babel/traverse
- **代码生成**: AST 操作工具
- **测试**: Jest (前端), Go testing (后端)
## 8. 可行性评估
### 8.1 技术可行性: ⭐⭐⭐⭐⭐
- Vue Router 提供完整的路由信息,易于解析
- 现有 RBAC 权限系统支持,扩展性好
- 数据库设计灵活,支持复杂关联关系
### 8.2 实现复杂度: ⭐⭐⭐
- 中等复杂度,需要开发多个核心组件
- 可复用现有的权限和用户管理模块
- 开发周期预计 4-6 周
### 8.3 维护性: ⭐⭐⭐⭐⭐
- 自动化程度高,减少手动配置工作
- 前后台权限统一管理,降低维护成本
- 支持新功能模块快速接入
## 9. 风险评估与应对
### 9.1 技术风险
#### 风险1: 路由解析复杂性
**描述**: Vue组件中的动态路由和嵌套路由可能增加解析复杂度
**影响**: 可能导致解析失败或结果不准确
**应对措施**:
- 使用成熟的AST解析库
- 建立完善的错误处理机制
- 提供手动配置选项作为备选方案
#### 风险2: 性能影响
**描述**: 大量路由和菜单数据可能影响应用启动性能
**影响**: 应用启动时间延长,用户体验下降
**应对措施**:
- 实现异步处理和懒加载
- 建立缓存机制
- 支持增量同步,避免全量处理
#### 风险3: 数据一致性
**描述**: 前后台路由同步过程中可能出现数据不一致
**影响**: 系统功能异常,权限控制失效
**应对措施**:
- 使用数据库事务确保原子性
- 实现版本控制和冲突检测
- 提供回滚和恢复机制
### 9.2 业务风险
#### 风险4: 用户接受度
**描述**: 新的菜单管理方式可能改变用户习惯
**影响**: 用户学习成本增加,可能影响工作效率
**应对措施**:
- 保持界面简洁直观
- 提供详细的使用文档和培训
- 支持渐进式迁移,保留原有功能
## 10. 扩展性考虑
### 10.1 多租户支持
- 菜单和权限支持租户隔离
- 支持租户级别的菜单定制
- 权限资源支持租户分组
### 10.2 国际化支持
- 菜单名称支持多语言
- 权限描述支持多语言
- 界面语言动态切换
### 10.3 插件化架构
- 支持第三方模块的菜单集成
- 提供插件开发接口
- 支持动态加载菜单模块
## 11. 监控与运维
### 11.1 系统监控
- 路由同步状态监控
- 菜单访问统计
- 权限验证性能监控
### 11.2 日志管理
- 同步操作日志
- 菜单变更日志
- 权限分配日志
### 11.3 备份与恢复
- 菜单配置备份
- 权限数据备份
- 快速恢复机制
## 12. 总结
本设计方案通过自动化手段实现前后台路由的智能同步,建立了菜单与权限资源的自动绑定机制。系统具有以下特点:
1. **高度自动化**: 减少手动配置工作,提高开发效率
2. **统一管理**: 前后台权限统一管理,降低维护成本
3. **灵活扩展**: 支持新功能模块快速接入
4. **用户友好**: 提供直观的菜单管理界面
该方案充分利用了现有的技术架构和权限系统,实现复杂度适中,具有很好的可行性和实用价值。通过分阶段实施,可以降低开发风险,确保项目成功交付。
---
**文档版本**: 1.0
**创建日期**: 2024年12月
**最后更新**: 2024年12月
**维护人员**: 开发团队
Loading…
Cancel
Save