帮我写一个vue3导航守卫分权的案例
以下是一个使用Vue 3导航守卫实现分权的案例:
首先,在main.js中引入Vue Router和创建路由实例:
import { createApp } from 'vue'
import { createRouter, createWebHistory } from 'vue-router'
import App from './App.vue'
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/admin',
name: 'Admin',
component: () => import('./views/Admin.vue'),
meta: {
requiresAuth: true,
isAdmin: true
}
},
{
path: '/user',
name: 'User',
component: () => import('./views/User.vue'),
meta: {
requiresAuth: true,
isAdmin: false
}
},
{
path: '/login',
name: 'Login',
component: () => import('./views/Login.vue')
}
]
})
const app = createApp(App)
app.use(router)
app.mount('#app')
然后,在路由配置中添加导航守卫:
router.beforeEach((to, from, next) => {
const isAuthenticated = /* 判断用户是否已经登录,例如通过localStorage.getItem('token')等方式判断 */
const isAdmin = /* 判断用户是否为管理员,例如通过localStorage.getItem('role')等方式判断 */
if (to.matched.some(record => record.meta.requiresAuth)) {
if (!isAuthenticated) {
next('/login')
} else {
if (to.matched.some(record => record.meta.isAdmin)) {
if (!isAdmin) {
next('/user')
} else {
next()
}
} else {
next()
}
}
} else {
next()
}
})
在上述代码中,我们首先判断用户是否已经登录,如果没有登录,则跳转到登录页面。如果已经登录,我们再根据路由的meta字段判断用户是否为管理员。如果用户是管理员,则可以访问/admin页面,否则只能访问/user页面。
在对应的组件中,可以根据需要进行权限控制的操作:
<template>
<div>
<h1 v-if="isAdmin">管理员页面</h1>
<h1 v-else>普通用户页面</h1>
</div>
</template>
<script>
export default {
computed: {
isAdmin() {
const isAdmin = /* 判断用户是否为管理员,例如通过localStorage.getItem('role')等方式判断 */
return isAdmin
}
}
}
</script>
这样,当用户访问/admin页面时,只有管理员才能进入,普通用户将被重定向到/user页面。而当用户访问/user页面时,无论是管理员还是普通用户都可以进入
原文地址: http://www.cveoy.top/t/topic/h4tu 著作权归作者所有。请勿转载和采集!