完全移除模块级权限系统,迁移至接口级权限
后端: - 删除 StudyRolePermission 模型和 project_permissions API 文件 - 重写 project_permissions.py core,移除所有模块级权限函数 - 重写 permission_cache.py,移除模块级权限缓存逻辑 - 新增权限模板功能(PermissionTemplate 模型、API、服务层) - 新增 permission_templates 数据库迁移 - 迁移 8 个模块(attachments、audit_logs、dashboard、faqs、 faq_categories、fees_attachments、knowledge_notes、 material_equipments、overview、subject_histories、subject_pds) 至接口级权限检查 - 删除所有模块级权限相关测试文件,新增权限模板测试 前端: - 删除 ProjectPermissions.vue 和 ProjectPermissionsModule.vue - 重写 projectRoutePermissions.ts,改为基于接口级权限格式 - 更新 store/study.ts、router/index.ts、AuditLogs.vue、Projects.vue 中的权限 API 调用,从 fetchProjectRolePermissions 改为 fetchApiEndpointPermissions - 清理 types/api.ts 中的旧模块级权限类型定义 - 新增 PermissionTemplateSelector.vue 组件 - 更新权限管理页面,移除模块级权限 tab Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
import { apiGet, apiPut, apiPost } from "./axios";
|
||||
import { apiGet, apiPut, apiPost, apiDelete } from "./axios";
|
||||
import type {
|
||||
ProjectRolePermissionsResponse,
|
||||
ProjectRolePermissionsUpdate,
|
||||
ApiEndpointPermissionsResponse,
|
||||
ApiEndpointPermissionsUpdate,
|
||||
PermissionMetricsResponse,
|
||||
@@ -10,14 +8,7 @@ import type {
|
||||
HealthResponse,
|
||||
} from "../types/api";
|
||||
|
||||
// 模块级权限(现有)
|
||||
export const fetchProjectRolePermissions = (studyId: string) =>
|
||||
apiGet<ProjectRolePermissionsResponse>(`/api/v1/studies/${studyId}/permissions/`);
|
||||
|
||||
export const updateProjectRolePermissions = (studyId: string, payload: ProjectRolePermissionsUpdate) =>
|
||||
apiPut<ProjectRolePermissionsResponse>(`/api/v1/studies/${studyId}/permissions/`, payload);
|
||||
|
||||
// 接口级权限(新增)
|
||||
// 接口级权限
|
||||
export const fetchApiEndpointPermissions = (studyId: string) =>
|
||||
apiGet<ApiEndpointPermissionsResponse>(`/api/v1/studies/${studyId}/api-permissions`);
|
||||
|
||||
@@ -27,7 +18,7 @@ export const updateApiEndpointPermissions = (studyId: string, payload: ApiEndpoi
|
||||
export const fetchApiOperations = () =>
|
||||
apiGet<{ operations: Array<{ operation_key: string; module: string; action: string; description: string; default_roles: string[] }> }>(`/api/v1/api-permissions/operations`);
|
||||
|
||||
// 权限系统监控API(新增)
|
||||
// 权限系统监控API
|
||||
export const fetchPermissionMetrics = () =>
|
||||
apiGet<PermissionMetricsResponse>(`/api/v1/permission-monitoring/metrics`);
|
||||
|
||||
@@ -48,3 +39,62 @@ export const resetPermissionMetrics = () =>
|
||||
export const clearPermissionAlerts = () =>
|
||||
apiPost<void>(`/api/v1/permission-monitoring/clear-alerts`);
|
||||
|
||||
// 权限模板API
|
||||
export interface PermissionTemplate {
|
||||
id: string;
|
||||
name: string;
|
||||
description: string | null;
|
||||
template_type: "ROLE" | "SCENARIO" | "CUSTOM";
|
||||
is_system: boolean;
|
||||
created_by: string | null;
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
permissions: Record<string, Record<string, boolean>>;
|
||||
tags: string | null;
|
||||
category: string | null;
|
||||
recommended_roles: string | null;
|
||||
versions: Array<{ id: string; version: number; change_log: string | null; created_at: string }>;
|
||||
}
|
||||
|
||||
export interface PermissionTemplateCreate {
|
||||
name: string;
|
||||
description?: string;
|
||||
template_type: "ROLE" | "SCENARIO" | "CUSTOM";
|
||||
permissions: Record<string, Record<string, boolean>>;
|
||||
tags?: string;
|
||||
category?: string;
|
||||
recommended_roles?: string;
|
||||
}
|
||||
|
||||
export interface ApplyTemplateRequest {
|
||||
template_id: string;
|
||||
roles?: string[];
|
||||
override?: boolean;
|
||||
}
|
||||
|
||||
export interface ApplyTemplateResponse {
|
||||
study_id: string;
|
||||
applied_roles: string[];
|
||||
permissions: Record<string, Record<string, { allowed: boolean }>>;
|
||||
}
|
||||
|
||||
export const fetchPermissionTemplates = (params?: { template_type?: string; category?: string }) =>
|
||||
apiGet<PermissionTemplate[]>(`/api/v1/permission-templates`, { params });
|
||||
|
||||
export const fetchPermissionTemplate = (templateId: string) =>
|
||||
apiGet<PermissionTemplate>(`/api/v1/permission-templates/${templateId}`);
|
||||
|
||||
export const createPermissionTemplate = (payload: PermissionTemplateCreate) =>
|
||||
apiPost<PermissionTemplate>(`/api/v1/permission-templates`, payload);
|
||||
|
||||
export const updatePermissionTemplate = (templateId: string, payload: Partial<PermissionTemplateCreate>) =>
|
||||
apiPut<PermissionTemplate>(`/api/v1/permission-templates/${templateId}`, payload);
|
||||
|
||||
export const deletePermissionTemplate = (templateId: string) =>
|
||||
apiDelete<void>(`/api/v1/permission-templates/${templateId}`);
|
||||
|
||||
export const applyPermissionTemplate = (studyId: string, payload: ApplyTemplateRequest) =>
|
||||
apiPost<ApplyTemplateResponse>(
|
||||
`/api/v1/studies/${studyId}/permission-templates/${payload.template_id}/apply`,
|
||||
payload,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user