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 相关文章推荐
用JSON做数据传输格式中的一些问题总结
Dec 21 Javascript
JS解决url传值出现中文乱码的另类办法
Apr 08 Javascript
js中符号转意问题示例探讨
Aug 19 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
qq悬浮代码(兼容各个浏览器)
Jan 29 Javascript
js中运算符&& 和 || 的使用记录
Aug 21 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
html的DOM中document对象anchors集合用法实例
Jan 21 Javascript
如何解决easyui自定义标签 datagrid edit combobox 手动输入保存不上
Dec 26 Javascript
JavaScript易错知识点整理
Dec 05 Javascript
BootStrap Fileinput的使用教程
Dec 30 Javascript
animate.css在vue项目中的使用教程
Aug 05 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
如何突破PHP程序员的技术瓶颈分析
2011/07/17 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
ThinkPHP在新浪SAE平台的部署实例
2014/10/31 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
让回调函数 showResponse 也带上参数的代码
2007/08/13 Javascript
js加强的经典分页实例
2013/03/15 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
javascript删除字符串最后一个字符
2014/01/14 Javascript
使用node.js 获取客户端信息代码分享
2014/11/26 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
Spring shiro + bootstrap + jquery.validate 实现登录、注册功能
2017/06/02 jQuery
VUE页面中加载外部HTML的示例代码
2017/09/20 Javascript
生成无限制的微信小程序码的示例代码
2019/09/20 Javascript
[43:36]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[01:11:37]完美世界DOTA2联赛PWL S2 SZ vs FTD.C 第一场 11.19
2020/11/19 DOTA
Python类的基础入门知识
2008/11/24 Python
Python操作json数据的一个简单例子
2014/04/17 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
python如何查看系统网络流量的信息
2016/09/12 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
Pytorch 高效使用GPU的操作
2020/06/27 Python
python -v 报错问题的解决方法
2020/09/15 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
L*SPACE官网:比基尼、泳装和度假服装
2019/03/18 全球购物
组织关系转移介绍信
2014/01/16 职场文书
实习协议书范本
2014/04/22 职场文书
灵能百分百第三季什么时候来?
2022/03/15 日漫
Java版 简易五子棋小游戏
2022/05/04 Java/Android