deotalandAi/.trae/documents/实现嵌套路由权限过滤.md

90 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 实现完整层级匹配的嵌套路由权限过滤
### 需求分析
1. 权限数据格式:`router:路由1:路由2:路由3:...`,其中 `router:` 是固定前缀
2. **匹配规则**:所有层级的路由标识都需要依次匹配,每一层路由必须是上一层路由的子路由
3. 支持任意深度的嵌套路由匹配
4. 确保路由唯一性,避免重复添加
5. 如果有重复的父级路由,只添加子路由
### 解决方案
1. **解析权限规则**将字符串权限规则按冒号分隔得到路由name数组
2. **创建路由映射表**:构建包含所有路由及其嵌套层级关系的映射
3. **完整层级匹配**:根据权限规则的所有层级,依次匹配每一层路由
4. **构建完整路由树**:将匹配到的所有层级路由构建成完整的嵌套结构
5. **去重处理**:确保每个路由只添加一次
### 实现步骤
1. 修改 `addPermissionRoutes` 方法
2. 解析 `permissionRouter` 中的权限规则转换为路由name数组
3. 构建包含所有路由及其层级关系的映射
4. 遍历每个权限规则,依次匹配每一层路由
5. 构建完整的嵌套路由树,确保路由唯一性
6. 将构建好的路由树动态添加到Vue Router中
### 代码修改点
**文件**`d:\work\Aiproject\DeotalandAi\apps\FrontendDesigner\src\stores\index.js`
**函数**`addPermissionRoutes`第67-89行
**核心逻辑**
1. 替换当前的简单过滤逻辑
2. 解析权限规则得到路由name数组
3. 构建包含所有路由及其层级关系的映射
4. 遍历每个权限规则,依次匹配每一层路由
5. 构建完整的嵌套路由树
6. 确保每个路由只添加一次
7. 将构建好的路由树动态添加到Vue Router中
### 实现细节
1. **权限规则解析**
-`router:路由1:路由2:路由3` 转换为 `['路由1', '路由2', '路由3']`
- 每个数组元素代表一个路由层级
2. **路由映射构建**
- 递归遍历 `permissionRoutes` 及其子路由
- 构建所有路由的name到路由对象的映射
- 构建父路由到子路由的映射关系
3. **完整层级匹配**
- 对于每个权限规则数组 `[name1, name2, name3]`
- 第一步:检查 `name1` 是否存在于路由映射中
- 第二步:检查 `name1` 的子路由中是否存在 `name2`
- 第三步:检查 `name2` 的子路由中是否存在 `name3`
- 以此类推,直到匹配完所有层级
4. **路由树构建**
- 为每个权限规则构建完整的路由树
- 确保父级路由存在
- 避免重复添加路由
- 只添加匹配到的路由及其父级路由(如果需要)
5. **去重处理**
- 使用Set或Map确保每个路由只添加一次
- 确保相同路由的子路由不会被重复添加
### 预期效果
- 支持一级路由匹配(如 `router:AdminOrders`
- 支持二级嵌套路由匹配(如 `router:AdminOrders:AdminContentReview`
- 支持任意深度嵌套路由匹配(如 `router:路由1:路由2:路由3:...`
- 所有层级的路由都需要匹配,确保路由完整性
- 构建完整的嵌套路由结构
- 确保路由唯一性,避免重复添加
### 实现示例
```javascript
// 权限规则示例
const permissionRules = ['router:AdminOrders', 'router:AdminOrders:AdminContentReview', 'router:AdminPermission:AdminRoleManagement'];
// 解析后的规则
const parsedRules = [
['AdminOrders'],
['AdminOrders', 'AdminContentReview'],
['AdminPermission', 'AdminRoleManagement']
];
// 匹配逻辑
// 规则1匹配AdminOrders一级路由
// 规则2先匹配AdminOrders一级路由再在其下匹配AdminContentReview子路由
// 规则3先匹配AdminPermission一级路由再在其下匹配AdminRoleManagement子路由
```