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 @@ - -