Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/工程化/权限校验

权限校验

3 分钟阅读 · Note

目录树 578 篇

          • 权限校验
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗0Hello TypeScript共同主题↗编译选项共同主题↗测试共同主题↗常见问题共同主题↗打包优化共同主题↗打包原理共同主题
  • 权限校验

权限校验

https://www.bilibili.com/video/BV1GXV96CEAA/?spm_id_from=444.41.list.card_archive.click&vd_source=47c9acd507be61251cd2bb730416395c

前端权限校验是确保系统安全、提升用户体验的重要环节。一个完善的前端权限控制方案通常包含以下几个核心维度:

一、 用户认证与状态管理

  1. 用户认证:这是权限控制的基础。常见的认证方式包括用户名/密码验证、OAuth(第三方登录)以及 JWT(JSON Web Token)。用户成功登录后,系统会生成令牌,后续请求需携带该令牌以验证身份。
  2. 集中式状态管理:为了避免权限逻辑散落在项目的各个角落,建议使用全局状态管理工具(如 Pinia 或 Vuex)。将用户的角色(roles)、权限点(permissions)等信息集中存储,并提供统一的 hasPermission 方法供各组件复用。

二、 页面级路由权限控制

这是防止未授权用户访问敏感页面的第一道防线。

  1. 路由元信息配置:在路由表中通过 meta 字段标记该页面所需的权限或角色(例如 meta: { requiresAuth: true, roles: ['admin'] })。
  2. 全局路由守卫:利用 Vue Router 等框架提供的全局前置守卫(beforeEach),在每次路由切换时拦截请求。检查用户是否已登录、是否拥有对应页面的权限。若无权限,则重定向至登录页或 403 错误页。
  3. 动态路由加载:根据后端返回的用户权限列表,动态生成并添加当前用户可访问的路由表,从而从根本上限制未授权页面的渲染。

三、 菜单级权限控制

菜单的显示应与路由权限保持一致,避免“能看到菜单但点进去没权限”的体验问题。

  • 基于路由过滤:不建议单独维护一套菜单配置,而是将菜单视为“带有特定标记(如 meta.menu = true)的路由”。通过递归遍历路由表,结合用户的权限信息进行过滤,只渲染用户有权限的菜单项。

四、 按钮与操作级权限控制

用于控制页面内的细粒度功能(如增删改查按钮)。

  1. 自定义指令:这是最省心且能让页面代码更干净的方式。例如封装一个 v-permission 指令,当绑定的元素没有相应权限时,直接将其从 DOM 中移除。
  2. 组件条件渲染:通过计算属性判断当前用户是否拥有指定权限,配合 v-if 来控制组件的显隐。
  3. 高阶组件(HOC):在 React 等框架中,可以使用高阶组件封装权限逻辑,对目标组件进行包装,无权限时返回空节点或提示。

五、 API 接口权限校验

前端的权限控制本质上是为了优化用户体验和减少无效请求,真正的安全底线在后端。

  • 前后端需要紧密协同,前端在进行关键操作时需调用后端接口,由后端进行最终的权限验证。
  • 若前端绕过校验直接发起非法请求,后端应拒绝并返回相应的错误码(如 403 Forbidden),前端捕获后进行友好提示。

六、 安全防护与监控

  • 代码保护:使用代码混淆(如 Obfuscator)和压缩工具,增加黑客逆向分析和篡改前端权限判断逻辑的难度。
  • 安全测试:定期进行渗透测试和安全扫描,排查越权访问漏洞。
  • 行为监控:对异常登录和操作行为进行日志监控,及时发现并响应安全事件。