Ver código fonte

# feat:菜单权限校验;

yang yi 7 horas atrás
pai
commit
35d8d57824
1 arquivos alterados com 27 adições e 3 exclusões
  1. 27 3
      src/router/index.ts

+ 27 - 3
src/router/index.ts

@@ -11,6 +11,8 @@ import {
     Menu,
     User,
 } from '@element-plus/icons-vue'
+import {useLoginUserStore} from "../store";
+import {ElMessage} from "element-plus";
 
 export const userRoutes:RouteRecordRaw[] = [
     {
@@ -51,7 +53,8 @@ export const adminRoutes:RouteRecordRaw[] = [
                 component: UserView,
                 meta:{
                     title: '用户管理',
-                    icon: User
+                    icon: User,
+                    requiresAdmin: true
                 }
             },
             {
@@ -60,10 +63,14 @@ export const adminRoutes:RouteRecordRaw[] = [
                 component: AdminLayout,
                 meta:{
                     title: '其他',
-                    icon: Menu
+                    icon: Menu,
+                    requiresAdmin: true
                 }
             }
-        ]
+        ],
+        meta: {
+            requiresAdmin: true
+        }
     }
 ]
 
@@ -79,4 +86,21 @@ const router : Router = createRouter({
         ...adminRoutes
     ],
 });
+router.beforeEach((to, _from, next) => {
+    if (to.matched.some(record => record.meta.requiresAdmin)) {
+        const loginUserStore = useLoginUserStore()
+        if (!loginUserStore.loginUser.isLogin) {
+            ElMessage.warning('请先登录')
+            next({path: '/login', query: {redirect: to.fullPath}})
+        } else if (loginUserStore.loginUser.user?.role !== 'admin') {
+            ElMessage.error('无权访问')
+            next('/')
+        } else {
+            next()
+        }
+    } else {
+        next()
+    }
+})
+
 export default router