From be041d638eac1e3cb4668abbccf18d9d607692e8 Mon Sep 17 00:00:00 2001 From: huangge1199 Date: Tue, 1 Jul 2025 10:38:29 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=A8=A1=E5=9D=97=EF=BC=9A?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/access.ts | 29 ++++++ src/components/GlobalHeader.vue | 27 ++++- src/pages/admin/UserManagePage.vue | 156 +++++++++++++++++++++++++++-- 3 files changed, 201 insertions(+), 11 deletions(-) create mode 100644 src/access.ts diff --git a/src/access.ts b/src/access.ts new file mode 100644 index 0000000..2e86a48 --- /dev/null +++ b/src/access.ts @@ -0,0 +1,29 @@ +import { useLoginUserStore } from '@/stores/useLoginUserStore' +import { message } from 'ant-design-vue' +import router from '@/router' + +// 是否为首次获取登录用户 +let firstFetchLoginUser = true; + +/** + * 全局权限校验 + */ +router.beforeEach(async (to, from, next) => { + const loginUserStore = useLoginUserStore() + let loginUser = loginUserStore.loginUser + // 确保页面刷新,首次加载时,能够等后端返回用户信息后再校验权限 + if (firstFetchLoginUser) { + await loginUserStore.fetchLoginUser() + loginUser = loginUserStore.loginUser + firstFetchLoginUser = false; + } + const toUrl = to.fullPath + if (toUrl.startsWith('/admin')) { + if (!loginUser || loginUser.userRole !== 'admin') { + message.error('没有权限') + next(`/user/login?redirect=${to.fullPath}`) + return + } + } + next() +}) diff --git a/src/components/GlobalHeader.vue b/src/components/GlobalHeader.vue index 1ffd2e6..8c3702d 100644 --- a/src/components/GlobalHeader.vue +++ b/src/components/GlobalHeader.vue @@ -45,7 +45,7 @@ - -