Vue 路由--角色的权限控制

Vue 路由–角色的权限控制

思路

首先说明需求目的,一般在未登陆情况下默认跳转至login页面,因此需要导航守卫来确保这一需求。例如忘记密码,注册,404各类提醒等页面的跳转并不需要用户进行登陆验证token操作,因此我们设置了路由白名单让这些路由可以直接渲染。例如角色admin和User需要用户进行登陆操作,这时我们就需要在路由中配置meta的权限role: [‘admin’, ‘user’]来判断需要可以访问的权限。

路由白名单(meta)

// 路由白名单
var constRouters = [
  {
  		path: '/login',
  		name: 'login',
  		component: Login,
  		meta: {title: '用户登录',isshow: true}
  	},
  	{
  		path: '/registUser',
  		name: 'registUser',
  		component: RegistUser,
  		meta: {title: '用户注册',isshow: true}
  	},
  	{
  		path: '/registOrg',
  		name: 'registOrg',
  		component: RegistOrg,
  		meta: {title: '单位注册',isshow: true}
  	},
  	{
  		path: '/',
  		name: 'home',
  		component: Home,
  		meta: {title: '主页',isshow: true}
  	},
  	{
  		path: '*',
  		component: () => import('@/views/NotFound.vue'),
  		meta: {title: '404',isshow: true}
  	}
]
export default constRouters

路由元信息控制(meta)

在一个网站上有不同的角色,要求不同的角色来访问不同的页面,我们的所有的路由都在路由表里,只要访问的时候通过(beforeEach 导航守卫)判断一下角色的权限。如果有权限就访问。没有权限就拒绝访问404。
在构建routers 路由信息的时,我们添加 meta 配置,在meat中添加路由对应的权限,然后在路由导航守卫中判断相关权限,控制路由跳转。
可以在每一个路由的 meta 属性里,将能访问该路由的角色添加到 roles 里。用户每次登陆后,将用户的角色返回。然后在访问页面时,把路由的 meta 属性和用户的角色进行对比,如果用户的角色在路由的 roles 里,那就是能访问,如果不在就拒绝访问。
方法1:

// 路由信息
const routers = [
 {
    path: '/index',
    name: 'index页',
    component: index,
    meta: {
       roles: ['admin', 'user']
    }
  },
   {
    path: '/admin',
    name: 'admin页',
    component: admin,
    meta: {
       roles: ['admin']
    }
  },
]

路由守卫


//实例化vue的时候只挂载constRouters
let router = new VueRouter({
	routes: constRouters
})
// 加入其它路由
router.addRoutes(routers)
//假设有两种角色:admin 和 user  
//从后台获取的用户角色
const role = 'user'
//当进入一个页面是会触发导航守卫 router.beforeEach 事件
router.beforeEach((to,from,next)=>{
 	if(whiteList.indexOf(to.path) != -1){
   	 	console.log("白名单")
   	 	next()
   		return
 	}
 	if (!sessionStorage.getItem('token') && to.name !== 'login') {// 未登录 跳转到登录页
		next({path: '/login'})
		return
	} 
	if(to.meta.roles.includes(role)){ //权限
		next()	//放行
	}esle{
		next({path:"/404"})	//跳到404页面
	}
})
  • 8
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在vue-admin-template中添加角色权限路由,可以按照以下步骤进行操作: 1. 在src目录下创建一个新的文件夹,例如"permission",用于存放与权限相关的文件。 2. 在permission文件夹中创建一个新的文件,例如"permission.js",用于定义权限相关的函数和路由。 3. 在permission.js文件中,首先导入需要的工具和路由配置文件。例如: ```javascript import { constantRoutes } from '@/router' ``` 4. 创建一个函数,用于根据角色权限动态生成路由。例如: ```javascript export function generateRoutes(roles) { // 根据角色权限进行路由过滤 const accessedRoutes = constantRoutes.filter(route => { if (hasPermission(roles, route)) { if (route.children && route.children.length) { route.children = filterAsyncRoutes(route.children, roles) } return true } return false }) return accessedRoutes } ``` 5. 创建一个辅助函数,用于判断当前角色是否有权限访问某个路由。例如: ```javascript function hasPermission(roles, route) { if (route.meta && route.meta.roles) { return roles.some(role => route.meta.roles.includes(role)) } else { return true } } ``` 6. 最后,在permission.js文件中导出生成的路由。例如: ```javascript export default { generateRoutes } ``` 7. 在src/router/index.js文件中,导入permission.js并使用生成的路由。例如: ```javascript import permission from '@/permission/permission' // 在路由的beforeEach钩子中根据角色权限动态生成路由 router.beforeEach(async(to, from, next) => { const hasRoles = store.getters.roles && store.getters.roles.length > 0 if (hasRoles) { next() } else { try { // 获取角色信息,可以根据实际情况修改 const { roles } = await store.dispatch('user/getInfo') // 根据角色权限动态生成路由 const accessedRoutes = permission.generateRoutes(roles) // 添加生成的路由 router.addRoutes(accessedRoutes) // 确保addRoutes完成 next({ ...to, replace: true }) } catch (error) { // 获取角色信息失败时的处理,可以根据实际情况修改 await store.dispatch('user/resetToken') next(`/login?redirect=${to.path}`) } } }) ``` 这样,根据用户的角色权限,动态生成的路由将会添加到路由配置中,用户只能访问其有权限的页面。请根据实际情况修改相关代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值