diff --git a/Merge/front/src/components/UserManagement.js b/Merge/front/src/components/UserManagement.js
index bed6b8f..8eb48e3 100644
--- a/Merge/front/src/components/UserManagement.js
+++ b/Merge/front/src/components/UserManagement.js
@@ -19,16 +19,41 @@
   const { userId: superAdminId } = useParams()
 
   const [users, setUsers] = useState([])
+  const [unauthorized, setUnauthorized] = useState(false)
 
   useEffect(() => {
     async function load() {
       try {
         // 调用接口获取用户列表
         const data = await fetchUserList(superAdminId)
-        setUsers(data)
+        
+        // 检查是否是权限错误
+        if (data && data.status === 'error' && data.message === 'Unauthorized') {
+          setUnauthorized(true)
+          setUsers([])
+          return
+        }
+        
+        // 确保数据是数组格式
+        let userList = []
+        if (Array.isArray(data)) {
+          userList = data
+        } else if (Array.isArray(data.data)) {
+          userList = data.data
+        } else if (Array.isArray(data.users)) {
+          userList = data.users
+        }
+        
+        setUsers(userList)
+        setUnauthorized(false)
       } catch (e) {
         console.error(e)
-        message.error('获取用户列表失败：' + e.message)
+        if (e.message === 'Unauthorized') {
+          setUnauthorized(true)
+          setUsers([])
+        } else {
+          message.error('获取用户列表失败：' + e.message)
+        }
       }
     }
 
@@ -41,13 +66,22 @@
   // 处理角色变更
   const handleRoleChange = async (userId, newRole) => {
     try {
+      let result
       if (newRole === '用户') {
-        await giveUser(superAdminId, userId)
+        result = await giveUser(userId)
       } else if (newRole === '管理员') {
-        await giveAdmin(superAdminId, userId)
+        result = await giveAdmin(userId)
       } else if (newRole === '超级管理员') {
-        await giveSuperAdmin(superAdminId, userId)
+        result = await giveSuperAdmin(userId)
       }
+      
+      // 检查返回结果是否有权限错误
+      if (result && result.status === 'error' && result.message === 'Unauthorized') {
+        setUnauthorized(true)
+        message.error('权限不足，无法执行此操作')
+        return
+      }
+      
       // 本地更新状态
       setUsers(us =>
         us.map(u => (u.id === userId ? { ...u, role: newRole } : u))
@@ -55,7 +89,12 @@
       message.success('修改成功')
     } catch (e) {
       console.error(e)
-      message.error('修改失败：' + e.message)
+      if (e.message === 'Unauthorized') {
+        setUnauthorized(true)
+        message.error('权限不足，无法执行此操作')
+      } else {
+        message.error('修改失败：' + e.message)
+      }
     }
   }
 
@@ -91,12 +130,23 @@
 
   return (
     <div className="admin-container">
-      <Table
-        dataSource={users}
-        columns={columns}
-        rowKey="id"
-        pagination={false}
-      />
+      {unauthorized ? (
+        <div style={{ 
+          textAlign: 'center', 
+          padding: '50px', 
+          fontSize: '18px',
+          color: '#ff4d4f'
+        }}>
+          权限不足，无法访问用户管理功能
+        </div>
+      ) : (
+        <Table
+          dataSource={users}
+          columns={columns}
+          rowKey="id"
+          pagination={false}
+        />
+      )}
     </div>
   )
 }
