From 87d2af5e480e3a0fa6bc7596881fbe90caebeb52 Mon Sep 17 00:00:00 2001 From: logan Date: Fri, 22 May 2026 23:17:43 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=84=B1=E6=95=8F=E5=A4=84=E7=90=86=20?= =?UTF-8?q?=E2=80=94=20=E7=A7=BB=E9=99=A4=E5=85=AC=E5=8F=B8=E5=9F=9F?= =?UTF-8?q?=E5=90=8D=E5=92=8C=E5=86=85=E9=83=A8=E5=AE=9E=E4=BE=8B=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - placeholder: pro-cex-rds → prod-mysql, pro-rds-ro.51aipay.com → mysql.example.com - test fixtures 同步替换 - 修复 PageHeader 权限检查: 同时检查 routePermissionMap 和 actionPermissionMap - 前端构建零错误, 后端202测试通过 --- backend/tests/test_instance_fields.py | 4 ++-- frontend/src/components/PageHeader.tsx | 8 +++++--- frontend/src/pages/InstancePage.tsx | 4 ++-- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/backend/tests/test_instance_fields.py b/backend/tests/test_instance_fields.py index 03f0949..e30cdab 100644 --- a/backend/tests/test_instance_fields.py +++ b/backend/tests/test_instance_fields.py @@ -7,9 +7,9 @@ from tests.conftest import auth_header async def test_create_instance_with_full_fields(client, admin_token): """创建数据源:完整字段""" res = await client.post("/api/v1/instances", json={ - "name": "pro-cex-rds-只读库", + "name": "prod-mysql-只读库", "db_type": "mysql", - "host": "pro-rds-ro.51aipay.com", + "host": "mysql.example.com", "port": 3306, "username": "admin", "password": "secret123", diff --git a/frontend/src/components/PageHeader.tsx b/frontend/src/components/PageHeader.tsx index 2786ded..1038e13 100644 --- a/frontend/src/components/PageHeader.tsx +++ b/frontend/src/components/PageHeader.tsx @@ -1,4 +1,4 @@ -import { useAuth } from '@/hooks/useAuth'; +import { useAuth, actionPermissionMap } from '@/hooks/useAuth'; import type { ReactNode } from 'react'; interface ActionConfig { @@ -17,9 +17,11 @@ interface PageHeaderProps { } export default function PageHeader({ title, description, action, secondaryAction, children }: PageHeaderProps) { - const { hasPermission } = useAuth(); + const { user, hasPermission } = useAuth(); - const canShowAction = !action?.permission || hasPermission(action.permission); + const canShowAction = !action?.permission + || hasPermission(action.permission) + || (actionPermissionMap[action.permission] || []).includes(user.role); return (
diff --git a/frontend/src/pages/InstancePage.tsx b/frontend/src/pages/InstancePage.tsx index 0d3cc91..187a680 100644 --- a/frontend/src/pages/InstancePage.tsx +++ b/frontend/src/pages/InstancePage.tsx @@ -408,13 +408,13 @@ function CreateInstanceForm({ defaultType, onCancel, onCreated }: { defaultType:
- setName(e.target.value)} className={inputCls} placeholder="pro-cex-rds-只读库" /> + setName(e.target.value)} className={inputCls} placeholder="例如:prod-mysql-只读库" />
- setHost(e.target.value)} className={inputCls} placeholder="pro-rds-ro.51aipay.com" /> + setHost(e.target.value)} className={inputCls} placeholder="例如:mysql.example.com" />