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