Vue 页面权限控制和登陆验证功能的实例代码


Posted in Javascript onJune 20, 2019

页面权限控制

页面权限控制是什么意思呢?

就是一个网站有不同的角色,比如管理员和普通用户,要求不同的角色能访问的页面是不一样的。如果一个页面,有角色越权访问,这时就得做出限制了。

Vue 动态添加路由及生成菜单 这是我写过的一篇文章,

通过动态添加路由和菜单来做控制,不能访问的页面不添加到路由表里,这是其中一种办法。

另一种办法就是所有的页面都在路由表里,只是在访问的时候要判断一下角色权限。如果有权限就让访问,没有权限就拒绝,跳转到 404 页面。

思路:

在每一个路由的 meta 属性里,将能访问该路由的角色添加到 roles 里。用户每次登陆后,将用户的角色返回。然后在访问页面时,把路由的 meta 属性和用户的角色进行对比,如果用户的角色在路由的 roles 里,那就是能访问,如果不在就拒绝访问。

代码示例:

路由信息

routes: [
 {
  path: '/login',
  name: 'login',
  meta: {
   roles: ['admin', 'user']
  },
  component: () => import('../components/Login.vue')
 },
 {
  path: 'home',
  name: 'home',
  meta: {
   roles: ['admin']
  },
  component: () => import('../views/Home.vue')
 },
]

页面控制

// 假设角色有两种:admin 和 user
// 这里是从后台获取的用户角色
const role = 'user'
// 在进入一个页面前会触发 router.beforeEach 事件
router.beforeEach((to, from, next) => {
 if (to.meta.roles.includes(role)) {
  next()
 } else {
  next({path: '/404'})
 }
})

登陆验证

网站一般只要登陆过一次后,接下来该网站的其他页面都是可以直接访问的,不用再次登陆。

我们可以通过 token 或 cookie 来实现,下面用代码来展示一下如何用 token 控制登陆验证。

router.beforeEach((to, from, next) => {
 // 如果有token 说明该用户已登陆
 if (localStorage.getItem('token')) {
  // 在已登陆的情况下访问登陆页会重定向到首页
  if (to.path === '/login') {
   next({path: '/'})
  } else {
   next({path: to.path || '/'})
  }
 } else {
  // 没有登陆则访问任何页面都重定向到登陆页
  if (to.path === '/login') {
   next()
  } else {
   next(`/login?redirect=${to.path}`)
  }
 }
})

上述所有实现,都可以在我的 vue轻量级后台管理系统基础模板 项目里找到

总结

以上所述是小编给大家介绍的Vue 页面权限控制和登陆验证功能的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
封装好的省市地区联动控件附下载
Aug 13 Javascript
jquery对表单操作2
Apr 06 Javascript
禁止你的左键复制实用技巧
Jan 04 Javascript
jquery ajax同步异步的执行最终解决方案
Apr 26 Javascript
js获取字符串最后一位方法汇总
Nov 13 Javascript
javascript简单实现滑动菜单效果的方法
Jul 27 Javascript
JS获取IE版本号与HTML设置IE文档模式的方法
Oct 09 Javascript
vue上传图片组件编写代码
Jul 26 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
vue点击按钮动态创建与删除组件功能
Dec 29 Javascript
JS绘图Flot如何实现可选显示曲线图功能
Oct 16 Javascript
Vue Element plus使用方法梳理
Dec 24 Vue.js
jQuery实现文本显示一段时间后隐藏的方法分析
Jun 20 #jQuery
javascript获取select值的方法完整实例
Jun 20 #Javascript
node基于async/await对mysql进行封装
Jun 20 #Javascript
JavaScrip数组去重操作实例小结
Jun 20 #Javascript
Vue 动态添加路由及生成菜单的方法示例
Jun 20 #Javascript
JavaScript命名空间模式实例详解
Jun 20 #Javascript
npm的lock机制解析
Jun 20 #Javascript
You might like
php防盗链的常用方法小结
2010/07/02 PHP
PHP日期函数date格式化UNIX时间的方法
2015/03/19 PHP
PHP实现路由映射到指定控制器
2016/08/13 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
PHP替换Word中变量并导出PDF图片的实现方法
2020/11/26 PHP
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
JS实现浏览器状态栏文字从右向左弹出效果代码
2015/10/27 Javascript
js 判断各种数据类型的简单方法(推荐)
2016/08/29 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
jQuery实现数字华容道小游戏(实例代码)
2020/01/16 jQuery
python实现目录树生成示例
2014/03/28 Python
Linux下为不同版本python安装第三方库
2016/08/31 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
Python运维自动化之nginx配置文件对比操作示例
2018/08/29 Python
对python中的高效迭代器函数详解
2018/10/18 Python
Python单元和文档测试实例详解
2019/04/11 Python
Python Web框架之Django框架Model基础详解
2019/08/16 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
在Django中实现添加user到group并查看
2019/11/18 Python
SpringBoot实现登录注册常见问题解决方案
2020/03/04 Python
HTML5新增的标签和属性归纳总结
2018/05/02 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
如何用JQuery进行表单验证
2013/05/29 面试题
护士实习自我鉴定
2013/10/22 职场文书
机械设计职业生涯规划书
2013/12/27 职场文书
大学班级干部的自我评价分享
2014/02/10 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
2022/08/05 Vue.js