ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Vue3 后台如何做权限管理?V3 Admin Vite 页面级 + 按钮级权限双维度方案完全指南

Vue3 后台如何做权限管理?V3 Admin Vite 页面级 + 按钮级权限双维度方案完全指南 Vue3 后台如何做权限管理V3 Admin Vite 页面级 按钮级权限双维度方案完全指南【免费下载链接】v3-admin-vite☀️ AI-friendly Vue3 admin template | Vue Admin | Vue Template | Vue3 Admin | Vue3 Template | Vue 后台 | Vue 模板 | Vue3 后台 | Vue3 模板项目地址: https://gitcode.com/un-pany/v3-admin-vite在 Vue3 后台管理系统中权限管理几乎是每个项目绕不开的核心需求。开源项目V3 Admin Vite是一个 AI-friendly 的 Vue3 后台管理模板内置了完整的页面级权限 按钮级权限双维度权限方案页面级通过路由动态加载控制谁能进这个菜单按钮级通过v-permission指令和checkPermission函数控制谁能点这个按钮。本文带你快速看懂这套权限管理方案的完整设计。一、为什么需要双维度权限管理很多新手做 Vue3 后台权限管理时只知道用户没权限就不显示页面却忽略了页面内的按钮级控制——比如普通用户能进订单页但不能看到删除按钮。V3 Admin Vite 的权限体系分为两层维度控制目标实现方式核心文件页面级权限菜单、路由、页面访问动态路由 路由守卫src/router/guard.ts按钮级权限按钮、标签页、操作项v-permission指令 /checkPermission函数src/plugins/permission-directive.ts两层共用同一套数据源登录后从后端获取用户的roles角色数组和permissions权限标识数组统一存放在 Pinia 的 user store 中见 src/pinia/stores/user.ts。二、页面级权限动态路由如何控制菜单访问1. 常驻路由与动态路由分离项目在 src/router/index.ts 中定义了常驻路由登录页、首页、403/404 等所有用户可见的路由在 src/router/index.ts 中定义了动态路由需要角色/权限才能访问的路由。动态路由通过在路由meta中声明roles或permissions来控制访问例如meta: { title: 页面级, roles: [admin], // 角色控制 permissions: [permission:page-level] // 权限标识控制 } 规则roles和permissions满足任意一个即可访问两者都不设置则不限制访问。2. 路由守卫登录 → 拉取权限 → 注册路由整个流程在 src/router/guard.ts 中完成核心步骤如下未登录无 Token 时直接重定向到登录页带redirect参数登录后可回到原页面已登录调用userStore.getInfo()从后端获取用户的角色和权限标识过滤路由通过 src/pinia/stores/permission.ts 中的递归函数按meta.roles/meta.permissions过滤出用户可访问的动态路由动态注册调用router.addRoute(route)把有权限的路由注入 Router——没权限的菜单根本不会出现在侧边栏。permissionStore.setRoutes({ roles, permissions }) // 生成可访问路由 permissionStore.addRoutes.forEach(route router.addRoute(route)) // 注册 若项目不需要按用户区分页面可以在 src/router/config.ts 中将dynamic设为false走全量路由模式。三、按钮级权限v-permission 指令 checkPermission 函数进入页面后更细粒度的控制交给两个开箱即用的工具1. v-permission 指令一行隐藏无权限按钮指令实现在 src/plugins/permission-directive.ts原理很简单挂载时校验用户角色/权限不满足条件就直接从 DOM 中移除元素。el-button v-permission[admin]仅 admin 可见/el-button el-button v-permission[admin, editor]admin 或 editor 可见/el-button2. checkPermission 函数动态渲染场景的最佳拍档全局权限判断函数定义在 src/common/utils/permission.ts逻辑与指令一致返回boolean适合配合v-if使用el-tab-pane v-ifcheckPermission([admin]) labeladmin⚠️经验提示Element Plus 的el-tab-pane、el-table-column等动态渲染 DOM 的场景不适合用v-permission指令在mounted时才执行此时应使用v-if checkPermission替代。这一官方建议在演示页 src/pages/demo/permission/button-level.vue 中有明确说明。四、快速上手切换用户验证权限效果项目内置了权限演示页面可以零成本体验完整效果页面级演示src/pages/demo/permission/page-level.vue按钮级演示src/pages/demo/permission/button-level.vue用户切换组件src/pages/demo/permission/components/SwitchUser.vue演示页顶部提供了editor/admin两个模拟用户切换器切换后可实时看到侧边栏菜单项的显隐editor 用户看不到页面级菜单页面内按钮、标签页的显隐不同角色看到的操作按钮不同。这就是验证权限方案是否生效的最快方式——页面级管进门按钮级管动手。五、权限管理方案小结 场景推荐方案说明控制菜单/页面访问动态路由 meta.roles/meta.permissions无权限路由不注册菜单天然隐藏控制静态按钮显隐v-permission指令一行搞定直接从 DOM 移除控制动态渲染组件显隐v-if checkPermission适配el-tab-pane等特殊场景获取用户角色/权限数据登录后调用接口存入 Pinia见 src/pinia/stores/user.tsV3 Admin Vite 的这套Vue3 后台权限管理方案用动态路由 自定义指令两条腿覆盖了页面级与按钮级两种典型需求结构清晰、代码量小非常适合作为后台模板的权限落地参考。直接参考 src/router/guard.ts 和 src/plugins/permission-directive.ts 两个文件你就能在自己的 Vue3 后台项目中快速复刻同一套权限体系。【免费下载链接】v3-admin-vite☀️ AI-friendly Vue3 admin template | Vue Admin | Vue Template | Vue3 Admin | Vue3 Template | Vue 后台 | Vue 模板 | Vue3 后台 | Vue3 模板项目地址: https://gitcode.com/un-pany/v3-admin-vite创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表