讲师中心 微信公众号
AI工具推荐 视频效率加速

Vue.js 中后台权限系统设计与动态菜单实践

夜婷姑娘_1679

夜婷姑娘_1679

发布时间:2026-05-15 11:17:46

|

889人浏览过

|

来源于php中文网

原创

Vue.js中后台权限系统需覆盖路由级、菜单级与按钮级三层控制,可通过RBAC模型映射权限标识、lanes库声明式管理、后端驱动菜单结构及自定义指令/组件实现按钮权限。

vue.js 中后台权限系统设计与动态菜单实践 - php中文网

如果您正在开发 Vue.js 中后台系统,但发现不同角色用户登录后菜单显示混乱、路由无法精准控制或按钮权限失效,则很可能是权限系统设计未覆盖路由级、菜单级与按钮级三层控制。以下是实现该目标的多种实践路径:

一、基于 RBAC 模型的权限数据结构与路由映射

该方法通过后端返回标准化的权限标识(如 sys:menu:add),在前端构建“用户→角色→权限”三级关联,并将权限标识与路由 meta 字段精确绑定,从而驱动动态路由注册与菜单过滤。

1、定义常量路由与异步路由分离:在 router/index.js 中导出 constantRoutes(含 /login、/404 等无需鉴权页面)与 asyncRoutes(含所有业务模块,每个 meta.perm 字段明确标注权限标识)。

2、登录成功后调用权限接口,获取包含 roles、permissions 和 menus 的完整响应体。

立即学习“前端免费学习笔记(深入)”;

3、使用递归函数遍历 asyncRoutes,对每个路由节点执行权限校验:若节点无 meta.perm 则保留;若有,则检查其值是否存在于返回的 permissions 数组中。

4、对通过校验的路由调用 router.addRoute()(Vue Router 4+)逐条注入,同时将过滤后的菜单树同步存入 Vuex 或 Pinia store。

二、采用 lanes 库实现声明式路由-菜单-权限一体化管理

该方案摒弃手动维护多份配置的冗余模式,仅需一份增强型路由定义即可自动完成路由注册、菜单生成与权限判断,显著降低耦合度与出错率。

1、安装依赖:npm install @lanes/router,并在项目中引入 LanesRouter 插件。

2、编写统一配置文件 src/config/routes.ts,为每个路由节点添加 meta.menu(菜单展示属性)、meta.permission(权限码)和 meta.icon(图标标识)等扩展字段。

3、在路由守卫中调用 lanes.generateRoutes(permissions),传入后端返回的权限字符串数组,自动返回当前用户可访问的路由集合并完成注册。

Auth0 Vue
Auth0 Vue

在 Vue.js 3 中添加身份验证(登录、注销、用户会话、受保护路由),集成 @auth0/auth0-vue SDK,配合 Vite 使用。

下载

4、在菜单组件中直接使用 lanes.getMenuTree() 获取已按权限过滤且具备层级结构的菜单数据,无需额外遍历逻辑。

三、后端驱动菜单结构 + 前端动态渲染

此方式将菜单组织权完全交由后端数据库管理,前端仅负责请求、解析与渲染,适用于菜单变更频繁、运营人员需自主配置的中大型系统。

1、后端提供 GET /api/menus 接口,返回扁平化菜单列表,每项含 id、parentId、path、component、perms 及 visible 字段。

2、前端接收到数据后,调用工具函数 buildTree(menus) 将其转换为嵌套树形结构,同时剔除 visible === '1' 或权限不匹配的节点。

3、遍历树形菜单,对每个有效节点调用 router.addRoute() 注册对应路由,确保 path 与 component 准确映射。

4、将最终树形结构赋值给响应式变量,供 <el-menu> 或自定义菜单组件消费,支持图标、标题、跳转逻辑的完整呈现。

四、按钮级权限控制:自定义指令与组件封装双轨机制

路由与菜单控制仅解决“能否进入”,按钮权限则决定“能否操作”,需在 DOM 层面对特定元素实施可见性或交互性拦截。

1、注册全局自定义指令 v-permission,接收权限标识字符串(如 user:delete),内部比对当前用户权限数组,不匹配时移除元素或添加 disabled 属性并隐藏样式。

2、创建权限包裹组件 <PermissionButton>,通过 slot 接收按钮内容,props 传入 perm,组件内部使用 v-if 控制渲染,避免无权限时 DOM 节点残留。

3、在 API 请求层统一注入权限校验逻辑:所有涉及敏感操作的请求,在发起前检查 store.state.user.permissions.includes(perm),不满足则直接拒绝执行并提示 无操作权限。

4、对表单内嵌按钮(如编辑、删除图标),结合 el-table 的 scoped-slot 使用指令或组件,确保每一行独立受控。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2303

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

4943

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

6030

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

5538

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

783

2024.05.22

vuex是什么
vuex是什么

Vuex是一个用于Vue.js应用程序的状态管理模式,提供了一种结构化的方式来组织和管理应用程序的状态,使得数据的获取和修改更加简单和可靠。本专题为大家提供vuex相关的文章、下载、课程内容,供大家免费下载体验。

735

2023.08.11

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

1634

2023.07.17

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

11882

2024.02.23

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

80

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app快速上手
uni-app快速上手

共0课时 | 0人学习

Vue 教程
Vue 教程

共42课时 | 16.9万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn