概述
如果VUE权限控制问题困扰着你,那么这篇文章将拯救你。关于VUE的前台路由控制和视图控制是大家最需要的前端技术解决方案。
Vue-Access-Control
本解决方案是基于 Vue-Access-Control 进行改造的,深度剖析了里面的路由控制和视图控制(资源控制还是后台做比较靠谱)
心路历程
- 权限数据由后台接口获得(权限树),但是前端不能贸然存储到本地浏览器里(localStorage、sessionStorage、Cookie等),如果被恶意篡改,麻烦可就大了!!!!!
- 想要用 VUEX (状态管理模式)来存储,但是网页一刷新,就会被重置成空,所以我推断 VUEX 适合用在 “无刷新” 的 APP 中;再者,权限树这么复杂的结构,并不是 VUEX 所实现的 “共享状态” 模式,只是单一的对每个页面(路由控制)、按钮(视图控制)、接口(请求控制)
- 针对实际的应用场景,请求控制,就是某个角色是否有调用某个接口的权限,这种后台会做权限控制的,没有权限会给你报401的,只有“路由控制”和“视图控制”是前端人员需要去解决的。
- 对于 Vue-Access-Control 这套权限解决方案貌似也有不完美之处,不能贴合实际的开发需要,需要稍作调整,比如路由嵌套两层还是可以使用的,要是三层及其以上就得修改递归的函数了。
实现原理
具体实现
授之以鱼不如授之以渔
本着这个原则,代码的主要设计思想是:
- 将接口所得数据(菜单树形结构)存至本地(sessionStorage);
- 每次刷新页面重新调取接口,更新数据到本地(sessionStorage),保证设置权限的实时效应;
- 其次是用VUEX的状态机管理机制,由于父子组件相互调用问题,会导致数据不能及时从父组件更新到子组件的视图上,就是不显示在页面上;故而用VUEX来更新数据,让其获取到全局性质的值,这种设计来源于同事遇到的这个坑。
1 | <template> |
代码剖析
1 | export default { |