Vue 中如何实现权限控制和路由守卫?

1. 什么是权限控制

权限控制,指的是在应用程序中控制用户访问和操作资源的过程。例如,一个网站需要控制用户对不同页面的访问权限,只有登录用户才能访问个人中心页面。

在Vue中,我们通常使用路由守卫来实现权限控制。

2. 路由守卫的基本概念

路由守卫是Vue Router提供的一组钩子函数,可以在进入和离开页面时执行一些逻辑操作。

Vue Router提供了三种类型的守卫:

全局守卫:对所有路由生效的守卫。

路由独享守卫:只对某个路由生效的守卫。

组件内的守卫:只对某个组件生效的守卫。

这里主要讲述全局守卫和路由独享守卫。

3. 全局守卫

3.1 前置守卫

前置守卫在路由进入之前执行,可以用来进行登录状态检查、权限控制等操作。其中最常用的是判断用户是否登录:

router.beforeEach((to, from, next) => {

if (to.meta.requiresAuth && !isLoggedIn()) {

next({

name: 'login',

query: { redirect: to.fullPath }

})

} else {

next()

}

})

上面的代码中,我们使用了beforeEach守卫,在进入到新的路由之前会被调用。如果该路由需要授权访问且用户未登录,则会跳转到登录页面。

3.2 后置守卫

后置守卫在路由离开之后执行,可以用来进行统计、清理等操作。一个典型的例子是在页面加载完成之后,让页面的滚动条回到顶部:

router.afterEach(() => {

window.scrollTo(0, 0)

})

4. 路由独享守卫

路由独享守卫是指只在某个路由中生效的守卫,可以用来控制此路由的访问权限、数据加载等操作。使用方式如下:

{

path: '/admin',

component: Admin,

beforeEnter: (to, from, next) => {

if (!isAdmin()) {

next({

name: 'home'

})

} else {

next()

}

}

}

上面的代码中,我们使用了beforeEnter守卫,只有当判断用户是管理员时,才能进入/admin页面。

5. 结语

Vue Router提供了多种路由守卫,我们可以根据应用程序的需要,在不同层级中使用它们,从而实现权限控制、数据预处理等功能。