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 相关文章推荐
js 可拖动列表实现代码
Dec 13 Javascript
jQuery获取(选中)单选,复选框,下拉框中的值
Feb 21 Javascript
AngularJS使用angular-formly进行表单验证
Dec 27 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
Dec 28 Javascript
利用JavaScript实现栈的数据结构示例代码
Aug 02 Javascript
Gulp实现静态网页模块化的方法详解
Jan 09 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
Jan 20 Javascript
JS函数动态传递参数的方法分析【基于arguments对象】
Jun 05 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
Jul 19 Javascript
layui table设置某一行的字体颜色方法
Sep 05 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
vue webpack build资源相对路径的问题及解决方法
Jun 04 Javascript
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
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
2014/06/25 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
PHP字符串word末字符实现大小写互换的方法
2014/11/10 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
javascript实现阻止iOS APP中的链接打开Safari浏览器
2014/06/12 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jQuery实现购物车数字加减效果
2015/03/14 Javascript
基于jQuery Ajax实现上传文件
2016/03/24 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
Vue.js学习笔记之 helloworld
2016/08/14 Javascript
浅谈关于.vue文件中style的scoped属性
2017/08/19 Javascript
Vue中之nextTick函数源码分析详解
2017/10/17 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
Node.js 多进程处理CPU密集任务的实现
2019/05/26 Javascript
jQuery实现弹幕特效
2019/11/29 jQuery
python中使用正则表达式的后向搜索肯定模式(推荐)
2017/11/11 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
python批量修改图片后缀的方法(png到jpg)
2018/10/25 Python
Flask框架工厂函数用法实例分析
2019/05/25 Python
python 设置xlabel,ylabel 坐标轴字体大小,字体类型
2019/07/23 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
2020/01/21 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
外语系毕业生自荐信范文
2013/12/16 职场文书
质检部部长职责
2013/12/16 职场文书
报到证丢失证明
2014/01/11 职场文书
酒店总经理欢迎词
2014/01/15 职场文书
锅炉工岗位职责
2015/02/13 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
2016天猫双十一广告语
2016/01/28 职场文书
PyCharm 配置SSH和SFTP连接远程服务器
2022/05/11 Python