Vue项目 权限控制方案 --使用路由守卫与自定义指令

举报
拿我格子衫来 发表于 2022/03/18 00:23:55 2022/03/18
【摘要】 今日徒弟问我,怎么处理后台管理这块的拦截 比如,用户没有一个路由的权限,但用户直接从其他地方得到的链接,直接输入到浏览器,这种应该怎么做拦截 另外,权限如果控制到按钮上,改如何做权限,有没有简单,轻便的方法.   于是我整理了一些目前我们系统的权限管理方案,给她做了一个demo展示. 全局前置导航守卫js // 使...

今日徒弟问我,怎么处理后台管理这块的拦截

比如,用户没有一个路由的权限,但用户直接从其他地方得到的链接,直接输入到浏览器,这种应该怎么做拦截

另外,权限如果控制到按钮上,改如何做权限,有没有简单,轻便的方法.

 

于是我整理了一些目前我们系统的权限管理方案,给她做了一个demo展示.

全局前置导航守卫js


  
  1. // 使用路由守卫对router全局权限拦截,
  2. import router from './src/router'
  3. import NProgress from 'nprogress'
  4. import 'nprogress/nprogress.css'
  5. NProgress.configure({ showSpinner: false })
  6. const whiteList = ['/login', '/withoutPermission', '/'] // 不进行权限判断的白名单
  7. router.beforeEach((to, from, next) => {
  8. NProgress.start()
  9. if (whiteList.includes(to.path)) {
  10. next()
  11. } else {
  12. // 获取localStorage中的权限链接数组
  13. const localStoragePermissionLinkArr = JSON.parse(localStorage.getItem('permissionLink') || '[]')
  14. if (localStoragePermissionLinkArr && localStoragePermissionLinkArr.length > 0 ) {
  15. if (localStoragePermissionLinkArr.includes(to.path)) {
  16. console.log('有此页面权限直接进入')
  17. next()
  18. } else {
  19. console.log('没有此权限进入无权限页面')
  20. next({ path: '/withoutPermission' })
  21. NProgress.done()
  22. }
  23. } else {
  24. console.log('localStorage中没有权限数组permissionLink')
  25. next({ path: '/login' })
  26. NProgress.done()
  27. }
  28. }
  29. })
  30. router.afterEach(() => {
  31. NProgress.done()
  32. })

 

自定义权限拦截指令


  
  1. // 验证权限自定义指令 在对象插入父级元素时验证
  2. // bind:指令的表达式对象,权限链接; el绑定指令的element,
  3. // 例如v-permission="'/start/add'"
  4. Vue.directive('permission', {
  5. inserted: function (el, bind) {
  6. let permissionUrl = bind.value
  7. let permissionArr = JSON.parse(localStorage.getItem('permissionLink') || '[]')
  8. if (!permissionArr.includes(permissionUrl)) {
  9. el.parentNode.removeChild(el)
  10. }
  11. }
  12. })

使用方法如下:


  
  1. <router-link v-permission="'/home'" to="/home">Home | </router-link>
  2. <router-link v-permission="'/about'" to="/about">About | </router-link>
  3. <router-link v-permission="'/admin'" to="/admin">Home | </router-link>
  4. <router-link v-permission="'/withoutPermission'" to="/withoutPermission">withoutPermission | </router-link>
  5. <router-link v-permission="'/test1'" to="/test1">test1</router-link>

 

文章来源: fizzz.blog.csdn.net,作者:拿我格子衫来,版权归原作者所有,如需转载,请联系作者。

原文链接:fizzz.blog.csdn.net/article/details/97674939

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。