以下是一个使用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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录