前端权限管理:实现接口级权限管理UI和监控仪表板

新增功能:
- 新增 ApiPermissions.vue 主页面,支持模块级/接口级权限切换
- 新增 ProjectPermissionsModule.vue 组件,展示模块级权限矩阵
- 新增 ApiEndpointPermissions.vue 组件,展示接口级权限矩阵
- 新增 PermissionMonitoring.vue 组件,展示权限系统监控仪表板
- 更新 projectPermissions.ts API 客户端,支持接口级权限和监控API
- 新增权限相关的 TypeScript 类型定义
- 更新路由配置,添加接口级权限管理路由
- 更新国际化文本,添加权限管理相关的中文文本

API 客户端新增函数:
- fetchApiEndpointPermissions: 获取接口级权限矩阵
- updateApiEndpointPermissions: 更新接口级权限矩阵
- fetchPermissionMetrics: 获取权限检查指标
- fetchCacheStats: 获取缓存统计
- fetchPermissionAlerts: 获取告警列表
- fetchPermissionHealth: 获取系统健康状态
- resetPermissionMetrics: 重置指标
- clearPermissionAlerts: 清除告警

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
Cheng Zhou
2026-05-14 09:19:07 +08:00
parent 1247b64e91
commit 387d035b08
8 changed files with 1107 additions and 2 deletions
+75
View File
@@ -152,3 +152,78 @@ export interface ProjectRolePermissionsResponse {
export interface ProjectRolePermissionsUpdate {
roles: ProjectPermissionMatrix;
}
// 接口级权限
export interface ApiEndpointPermissionsResponse {
[role: string]: {
[endpoint_key: string]: {
allowed: boolean;
};
};
}
export interface ApiEndpointPermissionsUpdate {
[role: string]: {
[endpoint_key: string]: boolean;
};
}
// 监控指标
export interface PermissionCheckMetrics {
total_checks: number;
allowed_checks: number;
denied_checks: number;
total_time: number;
min_time: number;
max_time: number;
avg_time: number;
allow_rate: number;
deny_rate: number;
error_rate: number;
errors: number;
}
export interface CacheMetrics {
total_accesses: number;
cache_hits: number;
cache_misses: number;
cache_invalidations: number;
hit_rate: number;
miss_rate: number;
}
export interface PermissionMetricsResponse {
check_metrics: PermissionCheckMetrics;
cache_metrics: CacheMetrics;
uptime_seconds: number;
}
export interface CacheStatsResponse {
cache_items: {
project_permissions_count: number;
member_role_count: number;
total_count: number;
};
cache_metrics: CacheMetrics;
}
export interface Alert {
timestamp: number;
level: "info" | "warning" | "error";
type: string;
message: string;
data: Record<string, any>;
}
export interface AlertsResponse {
total: number;
alerts: Alert[];
}
export interface HealthResponse {
status: "healthy" | "degraded" | "unhealthy";
health_score: number;
issues: string[];
metrics: PermissionMetricsResponse;
cache_stats: CacheStatsResponse;
}