银川网站建设网站建设素材

武汉东湖新技术开发区一美阳光建材经营部 2026/09/09 17:46:36

@[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 权限系统应该做到:

  • 路由声明权限
  • 守卫集中判断
  • 页面不感知权限逻辑
  • 支持后端动态配置
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

甘肃网站建设湛江网站建设

DGL-KE知识图谱嵌入实战指南:从入门到精通【免费下载链接】dgl-keHigh performance, easy-to-use, and scalable package for

2026/06/30 12:53:33

网站建设策划方案网站建设心得

大家好,我是大飞哥。平时办公里碰PDF的活儿真不少——要提取某几页、合并多份文档、转成图片,或者把大PDF压小,之前要么用在线工具(怕泄密&#x

2026/06/30 10:37:52

淄博网站建设省建设厅网站

基于W5500的电路布局设计:从原理到实战的深度解析在嵌入式联网产品开发中,一个看似简单的“网口不通”问题,往往会让工程师耗费数天时间排查电源、信号完整性、接

2026/06/30 13:02:04

网站建设解决方案淮安网站建设

Qwen2.5-VL-3B-Instruct-AWQ深度解析:多模态AI的突破性进展与实践教程【免费下载链接】Qwen2.5-VL-3B-Instruct-AWQ项目地址: https:

2026/06/30 13:56:38

行业网站建设长沙 网站建设

从零开始:ShopXO电商系统完整部署指南【免费下载链接】ShopXO开源商城🔥🔥🔥ShopXO企业级免费开源商城系统,可视

2026/06/30 13:19:35

免费网站建设上海外贸网站建设

第一章:Open-AutoGLM 长按功能异常解决在使用 Open-AutoGLM 框架开发智能语音交互应用时,部分用户反馈设备端长按唤醒功能存在响应延迟或无响应的问题。该

2026/06/30 13:26:36

宜昌网站建设顺德网站建设

C语⾔是结构化的程序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事

2026/06/30 14:09:39

网站建设总结吉林省建设厅网站

第一章:GraphQL 的 PHP 接口文档GraphQL 是一种用于 API 的查询语言,允许客户端精确请求所需数据。在 PHP 环境中,通过使用如 Web

2026/06/30 10:46:22

建设建设网站的网站建设网

OBS Composite Blur插件终极指南:打造专业级视频模糊特效【免费下载链接】obs-composite-blurA comprehensive blur plugin for

2026/06/30 10:40:21

网站建设规划书仙桃网站建设

解锁高效人脸检测:YOLOv8工具箱的5大核心优势【免费下载链接】yolov8-face项目地址: https://gitcode.com/gh_mirrors/yo/yolov8-fa

2026/06/30 13:01:34