千家信息网

vue-router中如何实现权限控制

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章主要介绍"vue-router中如何实现权限控制"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"vue-router中如何实现权限控制"文章能帮助大家解
千家信息网最后更新 2024年11月19日vue-router中如何实现权限控制

这篇文章主要介绍"vue-router中如何实现权限控制"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"vue-router中如何实现权限控制"文章能帮助大家解决问题。

在vue-router控制前端权限是常见需求:

  1. 有一种做法是直接在后端完成判断,提供页面列表和操作列表,在前端进行渲染,但这个方案并不优雅,前后端耦合度比较高。

  2. 比较常见的做法是把登录页面独立在router之外,专门写一个权限控制文件,在登录之后根据用户权限加载router,之后把权限作为参数传入各种组件中,以控制元素的渲染。这个方法比较合理,没有什么额外的开销,只是需要独立写一个登录页面和权限控制文件比较麻烦一些,特别是对一些小项目而言。

我们希望还有更简单的方式。这个时候梳理一下需求,我们的主要目标是:

  1. 菜单栏控制,根据权限渲染可以进入的页面菜单;

  2. 操作按钮权限控制,没有操作权限的不予显示;

  3. 如果有人通过直接点击链接或输入地址进入没有权限的页面,则进行拦截;

第一、第二个目标是容易实现的,把权限列表传入对应组件,通过v-if判断即可,需要解决的是越权页面的拦截问题。在上面常见的做法中,为了实现拦截,单独写了一个登录页面,登录之后再根据权限加载路由,这样,没有权限的路由根本不会加载,于是被导向404页面。

那么,现在的问题是,怎么样会有更简单的方式?

显然,如果我们不想单独写login页面,那么router在登录前就完成加载了。如果无法通过router自动将越权页面导向404页面,我们能做的,只能手动引导了。思路清楚了,实现起来就毫无压力:

根据vue组件的生命周期,我们可以在mounted钩子上进行权限判断,如果通过props传入的用户权限列表没有对应权限,就跳转页面到404:

mounted () {     if (!this.check_user_privilege (current_page)) {       this.$Message.error('权限不足');       this.$router.push('404');     } }

当然,事实上vue-router也提供了页面跳转时的钩子方法,全局的有beforeEach、afterEach等,我们希望直接在组件内使用,则可以使用beforeRouteEnter方法,在进入页面时进行判断,比如:

beforeRouteEnter (to, from, next) {     next(vm => {       if (!vm.check_user_privilege (current_page)) {         vm.$Message.error('权限不足');         vm.$router.push('404');       }     })   },

具体可以参考[文档]。

当然,就这个例子来说,用vue-router提供的钩子还不如直接在mounted写判断条件,因为beforeRouteEnter方法中的next需要调用组件参数,是在mounted执行之后才执行的,而我们又经常需要在mounted钩子加载页面数据,为了避免浪费,先进行判断是比较好的。

和常用方法相比,简单方法是有额外开销的,主要在于需要完全加载路由,同时在加载页面后进行了一次判断。不过从写代码的角度来说,似乎逻辑上更节约,因为不用另外写一个集中进行权限控制的文件了,至于每个页面的权限判断,那是本来在菜单栏就要做的事情,延伸到不同页面也不算什么负担。

会不会有什么副作用呢?暂时来看似乎是没有的,如果在mounted最开始就进行页面权限判断,也不会有加载越权数据的问题,况且数据权限是后端需要单独判断的,不应该让前端去担心。

关于"vue-router中如何实现权限控制"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。

权限 页面 控制 方法 登录 组件 钩子 问题 做法 前端 常见 数据 文件 知识 菜单 路由 不同 参数 导向 开销 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 一样的手游为啥服务器不同 市网络安全新闻中心 金禾通行软件开发商 公司需要养着一个软件开发团队吗 网络安全产品验收交付报告 中职安全教育网络安全ppt 南通天科网络技术有限公司 上海拎住互联网科技有限公司 数据库归档模式切换 哪个数据库可以查找到期刊论文 软件开发研发阶段进度表 青岛盈佳网络技术有限公司 南京寅本网络技术有限公司招聘 互联网科技ps素材 磁盘满了怎么写到另一台服务器 中兴数据库与mysql 链条数据库 杨浦区信息软件开发管理方法 全自动配送系统软件开发 服务器能用pe清除密码吗 如何打开 查看数据库 完美世界服务器等级经验加成 网吧服务器都用什么主板 互联网的科技与商业思维 软件开发大赛评分标准 pg数据库查看归档是否开启 建华区网络安全宣传 云界直线软件开发 魔兽数据库wowhead 山西网络安全系统厂商
0