一、前言

部门现在的新系统的前端都是使用vue语言,前端管理系统用的框架都是element提供的vue-element-admin模板框架。只是针对公司业务,做了一些修改。其中权限控制模块用的比较频繁,所以今天就谈谈我们前端的vue项目权限控制是如何实现的。

二、vue项目的权限控制思路

权限控制分为菜单权限控制、按钮权限控制和请求url权限控制三大块。按钮权限控制比较容易,主要采取的方式是从后端返回按钮的权限,然后在前端进行显隐操作。url权限控制,主要是后端代码来控制,前端只需要规范好格式即可。剩下的菜单权限控制,是相对复杂一些的,下面主要针对菜单的权限控制来说明实现思路。

1、权限路由全部存到数据库

思路:设计一个路由数据库表,将需要进行权限控制的路由全部存到数据库中,然后当成一个资源表,分配给对应的角色。用户登录时,根据角色,查询对应的路由信息,返回前端,存到vuexstate中和存档本地的localStorage中(存到本地缓存是防止频繁向后台请求路由。因为每次页面刷新,state的中的数据会消失,就需要向后台请求。存到本地缓存可以解决这个问题)。然后进行解析,在router.beforeEach函数中,通过router.addRoutes(menu)新增路由。

路由示例:

{path: '/good',component: Layout,redirect: '/good/category',name: 'Good',meta: { title: '商品管理', icon: 'example' },children: [{path: '/category',name: 'category',component: () => import('@/views/goods/category'),meta: { title: '商品分类' }},{path: '/goods',name: 'goods',component: () => import('@/views/goods/goods'),meta: { title: '商品列表' }}]}
2、后台只返回角色

思路:这个也是vue-element-admin提供的一种权限控制方式,前端的每个路由添加对应的角色(具体看下面路由示例的meta中的roles配置)。后端只需要返回用户的角色,然后根据角色来筛选路由即可。

路由示例:

{path: '/permission',component: Layout,redirect: '/permission/page',alwaysShow: true, // will always show the root menuname: 'Permission',meta: {title: 'Permission',icon: 'lock',roles: ['admin', 'editor'] // you can set roles in root nav},children: [{path: 'page',component: () => import('@/views/permission/page'),name: 'PagePermission',meta: {title: 'Page Permission',roles: ['admin'] // or you can only set roles in sub nav}},{path: 'directive',component: () => import('@/views/permission/directive'),name: 'DirectivePermission',meta: {title: 'Directive Permission'// if do not set roles, means: this page does not require permission}},{path: 'role',component: () => import('@/views/permission/role'),name: 'RolePermission',meta: {title: 'Role Permission',roles: ['admin']}}]
3、后端返回路由名称

思路:设计一个简单的路由表,只需要填写路由的name即可,然后将数据库表中的路由分配给对应的角色。用户登录时,返回路由的name数组,前端只需要根据返回的数据,遍历路由,就可以实现路由的权限控制。这种方式和第一种方式的思路有点像,但是比较简单,不需要重新在前端重新解析和构建路由树。相对于第二种方式来说,安全性更高一点,因为权限控制最安全的做法还是后端来进行控制。

vue项目实现权限控制的几种思路相关推荐

  1. 如何用 Vue 实现前端权限控制

    本文来自作者 雅X共赏 在 GitChat 上分享 「如何用 Vue 实现前端权限控制(路由权限 + 视图权限 + 请求权限)」,「阅读原文」查看交流实录. 「文末高能」 编辑 | 哈比 为什么做前端 ...

  2. Vue项目中刷新当前页面的四种方法

    Vue项目中刷新当前页面的四种方法 前记 刷新当前页面的四种方法 this.$router.go(0) location.reload() 跳转空白页再跳回原页面 使用provide / inject ...

  3. 权限控制的两种主要方式详述

    权限控制的两种主要方式详述 粗粒度URL级别的权限控制 权限控制主要分为粗粒度URL级别的权限控制和细粒度的方法级别权限控制. 我们在后台系统的操作,无论 是点击一个按钮,还是点击一个菜单项,都是在访 ...

  4. sharepoint2013列表实现项目级权限控制

    sharepoint2013列表实现项目级权限控制 分类: sharepoint 20132014-07-07 22:30 108人阅读 评论(0) 收藏 举报 sharepoint工作流sharep ...

  5. vue 菜单级别权限控制实现

    之前写了一篇 <vue 按钮级别权限控制实现>,里面介绍了前端页面对于按钮权限的控制,这一篇来说说前端页面对于菜单权限的控制. 前端菜单权限,就是根据用户的权限不同控制菜单的显示隐藏,不同 ...

  6. vue实现角色权限控制

    一.前言 在广告机项目中,角色的权限管理是卡了挺久的一个难点.首先我们确定的权限控制分为两大部分,其中根据粒的大小分的更细: 接口访问的权限控制 页面的权限控制 菜单中的页面是否能被访问 页面中的按钮 ...

  7. vue实现路由权限控制

    我们后管理项目中经常需要对路由权限进行判定,不同的身份可以访问不同的路由. 实现的大体思路很简单,将路由分为基本路由和用户路由,基本路由所有用户均可访问,用户路由是当前用户能够访问的独有的路由. 我们 ...

  8. Vue项目引入icon图标的两种方法

    我用的是阿里巴巴矢量图标库 ****一,在文件中引入icon项目链接 将图标加入项目后会出一个链接(每新添加图标,此链接都应更新) 在Vue项目中,public/index.html中 将项目链接复制 ...

  9. 实现数据权限控制的一种方法

    在企业管理系统中,常常有这样的要求:  1. 用户一般只能查看自己部门的数据  2. 可以设置用户可以查看哪些部门的数据  这种权限的控制,一般称为数据权限,与之对应的功能权限,则是系统中哪些功能可以 ...

  10. shiro进行权限控制的四种方式

    我们使用shiro进行权限控制 有以下几种方式 1. URL拦截权限控制:基于filter过滤器实现 我们在spring配置文件中配置shiroFilter时配置 /css/ = anon /js/ ...

最新文章

  1. 25亿布局大湾区,创新工场的AI下一站
  2. 使用虚拟路径时出现404问题
  3. MySQL中通配类型各自作用_在Access数据库中。在查找操作中,通配符*、?与#各有什么作用?...
  4. 如何利用计算机实现非线性转换,基于cass数控绕线机非线性算法的设计与实现-计算机应用技术专业论文.docx...
  5. TestNg的IReporter接口的使用
  6. Stc8A Air720D联调,问题(已解决)
  7. 【Henu ACM Round #13 A】 Hulk
  8. 基于51单片的电风扇系统
  9. 计算机桌面的理解,电脑桌面的基础知识教程,教你认识电脑桌面
  10. HDU 5755 Gambler Bo(高斯消元裸题)——2016 Multi-University Training Contest 3
  11. java实现收藏功能
  12. 年月日时天干地支推算(农历、公历)
  13. 组件封装--button组件
  14. 7.PostgreSQL操作语句
  15. Spring Data JPA分页查询
  16. 【算法浅析NO.00004】递归算法浅析(un-accomplished version) by arttnba3
  17. 在Unity使用键盘控制摄像机的移动以及用鼠标滚轮控制摄像机视野放大和缩小
  18. Shell的while命令
  19. 灵魂之问:机器人编程学习的是什么?/机器人课与科学课/机器人课和编程课/乐高机器人学的是什么?
  20. 《大话设计模式》php版本

热门文章

  1. 【机器学习笔记】【决策树】【分类树】
  2. 大部头出版物排版软件
  3. 浏览器报ScriptResource.axd异常
  4. AndroidStudio 导出AAB格式上传谷歌提示超过150M 解决方案
  5. 有了域名想绑定域名邮箱?拥有域名后,如何免费绑定邮箱呢?如何使用【昵称@你的.域名】收发邮件
  6. 微型计算机原理中的mov,微机原理(判断题)(指令正误)
  7. 《SpringCloud Alibaba 微服务架构》专题(二十三)-Seat工作原理
  8. Python爬取新笔趣阁小说
  9. 计算机无法装补丁,主编教您win7 sp1补丁安装失败怎么办
  10. Dreamweaver快捷键