From 7bd9a284be6d4a5c243c4e3da2b5b1bf423d5eb5 Mon Sep 17 00:00:00 2001 From: wangziqi Date: Thu, 23 Jul 2026 14:27:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20harden=20permission-gated=20UI=20?= =?UTF-8?q?=E2=80=94=20minimum-org=20endpoint,=20modal/Popconfirm=20fail-c?= =?UTF-8?q?losed=20on=20revocation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/JinshujuMatchModal.tsx | 2 - apps/admin/src/pages/Exams/detail.tsx | 2 +- apps/admin/src/pages/Occupancies/index.tsx | 38 +++++++++---------- apps/admin/src/pages/Students/index.tsx | 2 +- 4 files changed, 21 insertions(+), 23 deletions(-) diff --git a/apps/admin/src/components/JinshujuMatchModal.tsx b/apps/admin/src/components/JinshujuMatchModal.tsx index 108479f..7ba297e 100644 --- a/apps/admin/src/components/JinshujuMatchModal.tsx +++ b/apps/admin/src/components/JinshujuMatchModal.tsx @@ -313,10 +313,8 @@ interface MatchModalProps { const JinshujuMatchModal: React.FC = ({ open, onClose, onApplied }) => { const { hasPermission, hasAllPermissions, permissionsReady } = usePermission(); - const canReadSync = hasPermission('sync:read'); const canTriggerSync = hasPermission('sync:trigger'); const canEnterModal = permissionsReady && hasAllPermissions('sync:read', 'sync:trigger'); - const canWriteRules = permissionsReady && canTriggerSync; const [step, setStep] = useState<'connection' | 'rule' | 'match' | 'applying'>('connection'); const [loading, setLoading] = useState(false); const [selectedRuleId, setSelectedRuleId] = useState(); diff --git a/apps/admin/src/pages/Exams/detail.tsx b/apps/admin/src/pages/Exams/detail.tsx index 94ad8db..17f6dc7 100644 --- a/apps/admin/src/pages/Exams/detail.tsx +++ b/apps/admin/src/pages/Exams/detail.tsx @@ -27,8 +27,8 @@ interface ExamDetail extends ExamItem { } const PhoneCell: React.FC<{ row: ScoreRow }> = ({ row }) => { - const reveal = useViewSensitive(row.studentId, '考试管理', hasPermission('log:create')); const { hasPermission } = usePermission(); + const reveal = useViewSensitive(row.studentId, '考试管理', hasPermission('log:create')); if (!row.phone) return <>-; return ( diff --git a/apps/admin/src/pages/Occupancies/index.tsx b/apps/admin/src/pages/Occupancies/index.tsx index fc9bd7f..e4acdea 100644 --- a/apps/admin/src/pages/Occupancies/index.tsx +++ b/apps/admin/src/pages/Occupancies/index.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useState, useMemo, useCallback, useRef } from 'react'; +import React, { useEffect, useState, useMemo, useCallback } from 'react'; import { Table, Button, @@ -594,25 +594,25 @@ const OccupanciesPage: React.FC = () => { > 批量退宿 - )} - {canDelete ? ( - - - - ) : null} + + + ) : null )}