Skip to content

好的,结合项目源码和 STAR 法则(Situation 背景, Task 任务, Action 行动, Result 结果),为您整理了这段经历的面试话术:

S - Situation (项目背景)

“在开发这个基于 Vue 3 的中大型企业级后台管理系统(MineAdmin)时,随着业务模块的不断扩展(如欠费管理、停车管理等),系统面临着复杂的角色体系。我们需要处理超级管理员、运营人员、财务等多种角色,传统的简单路由拦截已无法满足需求,急需一套能覆盖从页面路由按钮操作,甚至到数据行级别的精细化 RBAC 权限控制方案。”

T - Task (主要任务)

“我的任务是设计并实现一套立体化的前端权限体系。这套体系不仅要安全可靠(防止用户绕过),还要对开发者友好(调用简单),同时兼顾用户体验(无权时界面反馈自然)。核心目标是实现四位一体的控制机制:辅助函数、指令、组件和路由守卫。”

A - Action (关键行动)

我从四个维度构建了这套体系:

  1. 核心逻辑层(Helper): 我封装了统一的校验函数 [hasAuth.ts],它不仅对接 Pinia 中的用户权限 Store,还内置了超级管理员(*)通配符逻辑,作为所有上层调用的单一真值来源。

  2. 页面级防御(Router Guard): 在路由层面,我利用 Vue Router 的全局钩子 [router/index.ts] 实现了自动化拦截。通过读取路由 meta.auth 配置,在导航完成前自动校验。如果用户无权访问,系统会强制重定向到 403 页面,确保 URL 级别的安全性。

  3. 元素级控制(Directive): 针对高频的“按钮级权限”,我开发了 [v-auth 指令]。它在 DOM 挂载时运行,一旦校验失败,直接调用 el.parentNode.removeChild(el) 物理移除 DOM 节点。相比于简单的 display: none,这种方式更安全,防止用户通过控制台修改样式来非法操作。

  4. 区块与数据级灵活控制(Component & Logic)

    • 对于复杂的区块显示,我封装了 [MaAuth 组件],利用 Slot 机制,让开发者能轻松定义“有权限显示A,无权限显示B(如占位符)”的逻辑。
    • 在复杂的表格业务(如 [getTableColumns.tsx])中,我支持在 TSX 渲染函数中结合业务数据状态(如 row.status)动态调用 hasAuth,实现了“只有待支付状态且拥有编辑权限才能看到按钮”这类精细的数据级控制。

R - Result (最终结果)

“这套体系上线后,完美支撑了系统内数十个业务模块的权限管理。

  1. 开发效率提升:开发者只需在路由或按钮上加一行配置(如 v-auth="['user:add']")即可完成控制,无需重复编写校验逻辑。
  2. 安全性显著增强:通过物理移除 DOM 和路由强拦截,杜绝了绝大多数前端越权操作的可能。
  3. 用户体验优化:实现了权限的无感控制,界面上不会出现用户点了按钮才报错的尴尬情况,而是直接展示用户可操作的最简界面。”

Released under the MIT License.