当前位置: 首页 > news >正文

Vue Router 权限系统设计实战

@[toc]

在 Vue 项目里,权限问题永远不是“有没有”,而是“会不会失控”

一开始可能只是:

  • 登录校验
  • 菜单控制
  • 页面访问限制

但随着业务复杂度上来,很容易演变成:

  • 路由守卫越写越多
  • 页面里到处是 if (hasPermission)
  • 前后端权限逻辑不一致

这篇文章,我们不讲“能跑的权限”,而是讲可扩展、可维护、长期稳定的权限系统设计

一、先明确:权限系统到底在管什么?

先给一个非常重要的拆分:

权限 = 三件事

  1. 能不能进这个路由
  2. 能不能看到这个页面的入口
  3. 能不能执行某个操作(按钮级)

这篇文章重点讲第 1 件事:路由权限

二、权限设计的核心原则

在任何中大型项目里,下面三条原则一定要守住。

原则一:权限是“声明式”的

路由只声明自己需要什么权限,而不是怎么判断。

meta:{requiresAuth:true,roles:['admin']}

原则二:权限判断逻辑集中

绝不分散在页面、组件、API 调用里。

原则三:路由权限 ≠ 菜单权限

  • 路由权限:是否允许访问 URL
  • 菜单权限:是否展示入口

两者相关,但不要强耦合。

三、基础路由权限模型

路由声明

{path:'/admin',component:()=>import('@/views/admin/index.vue'),meta:{requiresAuth:true,roles:['admin']}}

全局守卫

router.beforeEach((to,from,next)=>{if(to.meta.requiresAuth&&!isLogin()){returnnext('/login')}next()})

这是最基础的一层,但还远远不够。

四、角色权限系统的正确写法

权限判断函数集中化

functionhasPermission(routeRoles:string[]){constuserRoles=getUserRoles()returnrouteRoles.some(role=>userRoles.includes(role))}

权限守卫

router.beforeEach((to,from,next)=>{const{roles}=to.metaif(roles&&!hasPermission(roles)){returnnext('/403')}next()})

好处:

  • 权限逻辑只有一个入口
  • 改规则不用全局搜代码

五、动态路由与后端权限

中后台项目几乎都会遇到:

路由由后端返回,前端动态注册

后端返回示例

[{"path":"/order","component":"order/index","roles":["admin"]}]

前端动态注册

constasyncRoutes=mapBackendRoutes(routesFromServer)asyncRoutes.forEach(route=>{router.addRoute(route)})

关键点

  • 前端仍然保留权限校验
  • 后端负责“能看到什么”
  • 前端负责“能不能访问”

六、权限与页面逻辑解耦

错误示例:

<button v-if="user.role === 'admin'">删除</button>

正确做法:

constcanDelete=usePermission('delete_order')

统一用权限 Hook / 方法,避免散落逻辑。

七、实战总结

一个稳定的 Vue Router 权限系统应该做到:

  • 路由声明权限
  • 守卫集中判断
  • 页面不感知权限逻辑
  • 支持后端动态配置
http://www.cnnetsun.cn/news/120379.html

相关文章:

  • EmotiVoice结合大模型打造拟人化对话系统
  • Vue 项目路由 + Layout 的最佳实践
  • 11、量子电路的架构感知分解
  • Kotaemon能否扛住高并发?压力测试数据来了
  • Kotaemon支持的多种部署模式详解(本地/云/混合)
  • Kotaemon矿业安全规程问答机器人部署
  • Python大数据技术的基于Hadoop的健康饮食推荐系统的设计与实现_5578bn9k_yh025
  • 从文本到情感语音:EmotiVoice的技术实现路径
  • Kotaemon多租户支持能力曝光,适用于SaaS场景
  • EmotiVoice语音合成引擎的架构设计与原理剖析
  • 1、Linux API 与 Kylix 开发全解析
  • 3、深入探索Linux API:错误处理与特性对比
  • 17、深入理解Socket服务器的创建与应用
  • 18、Linux网络编程:socket API函数深度解析
  • 聚铭网络蝉联ISC.AI 2025创新百强,持续领跑安全运营、网络与流量安全双赛道
  • 29、Python 中进程与线程管理全解析
  • EmotiVoice开源模型本地部署避坑指南
  • 笔试强训day7
  • EmotiVoice情感编码技术揭秘:如何让AI说出喜怒哀乐?
  • 46、基于 Pthreads 的多线程编程:基础与同步解析
  • 48、基于 Pthreads 的多线程编程:同步机制深入解析
  • 52、基于 Pthreads 的多线程编程(三)
  • Kotaemon文档翻译功能扩展:跨语言问答不再是难题
  • 好无聊,最近没思路
  • Kotaemon水务管理系统智能预警机制
  • Kotaemon视频内容摘要生成实验记录
  • 用Matlab探索齿轮系统的奥秘:刚度计算与动力学响应
  • 【node阅读-0】下载编译node
  • EmotiVoice支持动态情感过渡,实现平滑情绪变化
  • EmotiVoice推理时显存占用优化方案(适用于低配GPU)