From 15c6eefe305eb8493f2e4304a3f91da59feb13e7 Mon Sep 17 00:00:00 2001 From: SikongJueluo Date: Sat, 12 Jul 2025 18:54:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=99=AE=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=97=A0=E6=B3=95=E6=AD=A3=E5=B8=B8=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/AuthManager.ts | 15 +++++++++++---- src/views/User/Index.vue | 34 ++++++++++++++++++++++++++++++++-- 2 files changed, 43 insertions(+), 6 deletions(-) diff --git a/src/utils/AuthManager.ts b/src/utils/AuthManager.ts index 2fc7326..3613f76 100644 --- a/src/utils/AuthManager.ts +++ b/src/utils/AuthManager.ts @@ -210,15 +210,22 @@ export class AuthManager { await client.testAdminAuth(); return true; } catch (error) { - // 如果是401错误,说明token有效但不是管理员,不需要清除token - // 如果是其他错误,可能token无效,清除token + // 只有在token完全无效的情况下才清除token + // 401错误表示token有效但权限不足,不应清除token if ( error && typeof error === "object" && - "status" in error && - error.status !== 401 + "status" in error ) { + // 如果是403 (Forbidden) 或401 (Unauthorized),说明token有效但权限不足 + if (error.status === 401 || error.status === 403) { + return false; + } + // 其他状态码可能表示token无效,清除token AuthManager.clearToken(); + } else { + // 网络错误等,不清除token + console.error('管理员权限验证失败:', error); } return false; } diff --git a/src/views/User/Index.vue b/src/views/User/Index.vue index e79d9cb..e979e69 100644 --- a/src/views/User/Index.vue +++ b/src/views/User/Index.vue @@ -18,6 +18,10 @@
+
+ +
Item 2 内容
+
@@ -37,11 +41,37 @@ const isAdmin = ref(false); function setActivePage(event: Event) { const target = event.currentTarget as HTMLLinkElement; - activePage.value = toNumber(target.id); + const newPage = toNumber(target.id); + + // 如果用户不是管理员但试图访问管理员页面,则忽略 + if (newPage === 100 && !isAdmin.value) { + return; + } + + activePage.value = newPage; } onMounted(async () => { - isAdmin.value = await AuthManager.verifyAdminAuth(); + try { + // 首先验证用户是否已登录 + const isAuthenticated = await AuthManager.isAuthenticated(); + if (!isAuthenticated) { + // 如果未登录,重定向到登录页面 + // 这里可以使用路由跳转 + return; + } + + // 验证管理员权限 + isAdmin.value = await AuthManager.verifyAdminAuth(); + + // 如果当前页面是管理员页面但用户不是管理员,切换到用户信息页面 + if (activePage.value === 100 && !isAdmin.value) { + activePage.value = 1; + } + } catch (error) { + console.error('用户认证检查失败:', error); + // 可以在这里处理错误,比如显示错误信息或重定向到登录页面 + } });