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 相关文章推荐
JavaScript经典效果集锦
Jul 06 Javascript
javascript两种function的定义介绍及区别说明
May 02 Javascript
js获取某月的最后一天日期的简单实例
Jun 22 Javascript
js获得地址栏?问号后参数的方法
Aug 08 Javascript
jquery实现简单Tab切换菜单效果
Jul 17 Javascript
canvas快速绘制圆形、三角形、矩形、多边形方法介绍
Dec 29 Javascript
使用JavaScript开发跨平台的桌面应用详解
Jul 27 Javascript
vue.js element-ui tree树形控件改iview的方法
Mar 29 Javascript
JS实现的点击按钮图片上下滚动效果示例
Jan 28 Javascript
layui table 表格模板按钮的实例代码
Sep 21 Javascript
vue 实现购物车总价计算
Nov 06 Javascript
梳理一下vue中的生命周期
Dec 30 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
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
php中使用Akismet防止垃圾评论的代码
2011/06/10 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
PHP实现多文件上传的方法
2015/07/08 PHP
javascript:void(0)的真正含义实例分析
2008/08/20 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
jquery实现图片平滑滚动详解
2017/03/22 jQuery
react.js CMS 删除功能的实现方法
2017/04/17 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
vue1.0和vue2.0的watch监听事件写法详解
2018/09/11 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
JavaScript canvas基于数组生成柱状图代码实例
2020/03/06 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
[59:30]VG vs LGD 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.22
2019/09/05 DOTA
Python 中 Meta Classes详解
2016/02/13 Python
使用Django简单编写一个XSS平台的方法步骤
2019/03/25 Python
python flask安装和命令详解
2019/04/02 Python
python实现beta分布概率密度函数的方法
2019/07/08 Python
python中下标和切片的使用方法解析
2019/08/27 Python
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
AmazeUI的JS表单验证框架实战示例分享
2020/08/21 HTML / CSS
SheIn俄罗斯:时尚女装网上商店
2017/02/28 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
中班中秋节活动反思
2014/02/18 职场文书
文明村创建实施方案
2014/03/27 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
微信小程序实现轮播图指示器
2022/06/25 Javascript