前端权限管理:添加集成指南文档
新增文档: - FRONTEND_PERMISSION_INTEGRATION.md: 前端权限管理集成指南 文档内容: - 功能特性说明 - API 客户端使用示例 - 组件使用说明 - 类型定义参考 - 最佳实践建议 - 故障排除指南 - 后续改进方向 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,365 @@
|
||||
# 前端权限管理集成指南
|
||||
|
||||
## 概述
|
||||
|
||||
本文档说明如何在前端应用中使用新的权限管理功能,包括接口级权限管理和权限系统监控。
|
||||
|
||||
---
|
||||
|
||||
## 功能特性
|
||||
|
||||
### 1. 权限管理页面
|
||||
|
||||
**路由**: `/admin/projects/:id/api-permissions`
|
||||
|
||||
**功能**:
|
||||
- 模块级权限管理(向后兼容)
|
||||
- 接口级权限管理(新增)
|
||||
- 权限系统监控仪表板
|
||||
|
||||
### 2. 权限管理UI
|
||||
|
||||
#### 模块级权限标签页
|
||||
|
||||
- 显示角色 × 模块 × 读写权限的矩阵
|
||||
- 支持权限编辑和保存
|
||||
- 向后兼容现有权限系统
|
||||
|
||||
#### 接口级权限标签页
|
||||
|
||||
- 显示角色 × 接口端点的权限矩阵
|
||||
- 支持按模块、HTTP方法、端点名称搜索和筛选
|
||||
- 支持权限编辑和保存
|
||||
|
||||
#### 权限监控标签页
|
||||
|
||||
- 系统健康评分和状态
|
||||
- 权限检查性能指标
|
||||
- 缓存效率统计
|
||||
- 告警列表展示
|
||||
|
||||
---
|
||||
|
||||
## API 客户端使用
|
||||
|
||||
### 导入 API 函数
|
||||
|
||||
```typescript
|
||||
import {
|
||||
fetchProjectRolePermissions,
|
||||
updateProjectRolePermissions,
|
||||
fetchApiEndpointPermissions,
|
||||
updateApiEndpointPermissions,
|
||||
fetchPermissionMetrics,
|
||||
fetchCacheStats,
|
||||
fetchPermissionAlerts,
|
||||
fetchPermissionHealth,
|
||||
resetPermissionMetrics,
|
||||
clearPermissionAlerts,
|
||||
} from "@/api/projectPermissions";
|
||||
```
|
||||
|
||||
### 获取权限
|
||||
|
||||
```typescript
|
||||
// 获取模块级权限
|
||||
const modulePerms = await fetchProjectRolePermissions(studyId);
|
||||
|
||||
// 获取接口级权限
|
||||
const apiPerms = await fetchApiEndpointPermissions(studyId);
|
||||
```
|
||||
|
||||
### 更新权限
|
||||
|
||||
```typescript
|
||||
// 更新模块级权限
|
||||
await updateProjectRolePermissions(studyId, {
|
||||
roles: {
|
||||
PM: { subjects: { read: true, write: true } },
|
||||
CRA: { subjects: { read: true, write: true } },
|
||||
},
|
||||
});
|
||||
|
||||
// 更新接口级权限
|
||||
await updateApiEndpointPermissions(studyId, {
|
||||
PM: {
|
||||
"POST:/subjects": true,
|
||||
"GET:/subjects": true,
|
||||
},
|
||||
CRA: {
|
||||
"POST:/subjects": true,
|
||||
"GET:/subjects": true,
|
||||
},
|
||||
});
|
||||
```
|
||||
|
||||
### 获取监控数据
|
||||
|
||||
```typescript
|
||||
// 获取权限检查指标
|
||||
const metrics = await fetchPermissionMetrics();
|
||||
|
||||
// 获取缓存统计
|
||||
const cacheStats = await fetchCacheStats();
|
||||
|
||||
// 获取告警列表
|
||||
const alerts = await fetchPermissionAlerts("warning", 20);
|
||||
|
||||
// 获取系统健康状态
|
||||
const health = await fetchPermissionHealth();
|
||||
```
|
||||
|
||||
### 重置监控数据
|
||||
|
||||
```typescript
|
||||
// 重置指标
|
||||
await resetPermissionMetrics();
|
||||
|
||||
// 清除告警
|
||||
await clearPermissionAlerts();
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 组件使用
|
||||
|
||||
### ApiPermissions.vue(主页面)
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<ApiPermissions />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import ApiPermissions from "@/views/admin/ApiPermissions.vue";
|
||||
</script>
|
||||
```
|
||||
|
||||
**Props**: 无(从路由参数获取项目ID)
|
||||
|
||||
**事件**: 无
|
||||
|
||||
### ProjectPermissionsModule.vue(模块级权限)
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<ProjectPermissionsModule
|
||||
:project="project"
|
||||
:matrix="moduleMatrix"
|
||||
@update="onUpdate"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import ProjectPermissionsModule from "@/components/ProjectPermissionsModule.vue";
|
||||
import type { ProjectRolePermissionsResponse } from "@/types/api";
|
||||
|
||||
const onUpdate = (matrix: ProjectRolePermissionsResponse) => {
|
||||
// 处理权限更新
|
||||
};
|
||||
</script>
|
||||
```
|
||||
|
||||
**Props**:
|
||||
- `project`: 项目信息
|
||||
- `matrix`: 权限矩阵数据
|
||||
|
||||
**事件**:
|
||||
- `update`: 权限矩阵更新时触发
|
||||
|
||||
### ApiEndpointPermissions.vue(接口级权限)
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<ApiEndpointPermissions
|
||||
:project="project"
|
||||
:matrix="apiMatrix"
|
||||
@update="onUpdate"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import ApiEndpointPermissions from "@/components/ApiEndpointPermissions.vue";
|
||||
import type { ApiEndpointPermissionsResponse } from "@/types/api";
|
||||
|
||||
const onUpdate = (matrix: ApiEndpointPermissionsResponse) => {
|
||||
// 处理权限更新
|
||||
};
|
||||
</script>
|
||||
```
|
||||
|
||||
**Props**:
|
||||
- `project`: 项目信息
|
||||
- `matrix`: 权限矩阵数据
|
||||
|
||||
**事件**:
|
||||
- `update`: 权限矩阵更新时触发
|
||||
|
||||
### PermissionMonitoring.vue(监控仪表板)
|
||||
|
||||
```vue
|
||||
<template>
|
||||
<PermissionMonitoring
|
||||
:metrics="metrics"
|
||||
:health="health"
|
||||
:alerts="alerts"
|
||||
@refresh="onRefresh"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import PermissionMonitoring from "@/components/PermissionMonitoring.vue";
|
||||
import type {
|
||||
PermissionMetricsResponse,
|
||||
HealthResponse,
|
||||
AlertsResponse,
|
||||
} from "@/types/api";
|
||||
|
||||
const onRefresh = () => {
|
||||
// 刷新监控数据
|
||||
};
|
||||
</script>
|
||||
```
|
||||
|
||||
**Props**:
|
||||
- `metrics`: 权限检查指标
|
||||
- `health`: 系统健康状态
|
||||
- `alerts`: 告警列表
|
||||
|
||||
**事件**:
|
||||
- `refresh`: 刷新按钮点击时触发
|
||||
|
||||
---
|
||||
|
||||
## 类型定义
|
||||
|
||||
### ApiEndpointPermissionsResponse
|
||||
|
||||
```typescript
|
||||
interface ApiEndpointPermissionsResponse {
|
||||
[role: string]: {
|
||||
[endpoint_key: string]: boolean;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### ApiEndpointPermissionsUpdate
|
||||
|
||||
```typescript
|
||||
interface ApiEndpointPermissionsUpdate {
|
||||
[role: string]: {
|
||||
[endpoint_key: string]: boolean;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
### PermissionMetricsResponse
|
||||
|
||||
```typescript
|
||||
interface PermissionMetricsResponse {
|
||||
check_metrics: PermissionCheckMetrics;
|
||||
cache_metrics: CacheMetrics;
|
||||
uptime_seconds: number;
|
||||
}
|
||||
```
|
||||
|
||||
### HealthResponse
|
||||
|
||||
```typescript
|
||||
interface HealthResponse {
|
||||
status: "healthy" | "degraded" | "unhealthy";
|
||||
health_score: number;
|
||||
issues: string[];
|
||||
metrics: PermissionMetricsResponse;
|
||||
cache_stats: CacheStatsResponse;
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 最佳实践
|
||||
|
||||
### 1. 权限管理
|
||||
|
||||
- 定期检查权限配置的完整性
|
||||
- 使用权限监控仪表板监控权限系统状态
|
||||
- 及时处理告警信息
|
||||
|
||||
### 2. 性能优化
|
||||
|
||||
- 监控缓存命中率,目标 > 80%
|
||||
- 监控权限检查响应时间,目标 < 10ms
|
||||
- 定期重置指标以获取准确的统计数据
|
||||
|
||||
### 3. 错误处理
|
||||
|
||||
```typescript
|
||||
try {
|
||||
await updateApiEndpointPermissions(studyId, permissions);
|
||||
ElMessage.success("权限已保存");
|
||||
} catch (error) {
|
||||
ElMessage.error("保存权限失败");
|
||||
console.error(error);
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 故障排除
|
||||
|
||||
### 问题1: 权限数据加载失败
|
||||
|
||||
**症状**: 权限管理页面显示空白或加载失败
|
||||
|
||||
**解决方案**:
|
||||
1. 检查网络连接
|
||||
2. 验证项目ID是否正确
|
||||
3. 检查用户权限是否足够
|
||||
4. 查看浏览器控制台错误日志
|
||||
|
||||
### 问题2: 权限保存失败
|
||||
|
||||
**症状**: 点击保存按钮后没有反应或显示错误
|
||||
|
||||
**解决方案**:
|
||||
1. 检查权限数据格式是否正确
|
||||
2. 验证API端点是否可用
|
||||
3. 检查用户是否有权限修改权限配置
|
||||
4. 查看服务器日志
|
||||
|
||||
### 问题3: 监控数据不更新
|
||||
|
||||
**症状**: 监控仪表板显示的数据不更新
|
||||
|
||||
**解决方案**:
|
||||
1. 点击"刷新指标"按钮手动刷新
|
||||
2. 检查后端监控API是否正常运行
|
||||
3. 检查网络连接
|
||||
4. 查看浏览器控制台错误日志
|
||||
|
||||
---
|
||||
|
||||
## 后续改进
|
||||
|
||||
### 短期
|
||||
|
||||
- [ ] 权限导入/导出功能
|
||||
- [ ] 权限模板功能
|
||||
- [ ] 权限审计日志查看
|
||||
|
||||
### 中期
|
||||
|
||||
- [ ] 权限预测和建议
|
||||
- [ ] 权限使用分析
|
||||
- [ ] 权限风险评估
|
||||
|
||||
### 长期
|
||||
|
||||
- [ ] 资源级权限控制
|
||||
- [ ] 权限继承机制
|
||||
- [ ] 权限工作流审批
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: 1.0
|
||||
**最后更新**: 2026-05-14
|
||||
Reference in New Issue
Block a user