Skip to content

权限管理

本页面向“已经能跑通项目”的开发者,用一张图讲清 权限数据从后端到前端 的完整链 路,并补齐落地细节(路由权限、按钮权限、角色权限、数据权限的边界)。

1. 权限体系总览

你需要明确:

  • 前端做的是“体验层权限”(隐藏菜单、禁用按钮、拦截路由)。
  • 后端做的是“安全层权限”(接口鉴权、数据权限过滤)。
  • 两者必须使用同一套权限点命名,才能做到一致。

2. 权限类型与边界

2.1 路由权限(页面级)

  • 目标:用户只能访问被授权的页面。
  • 典型实现:登录后拉取后端菜单/路由 → 转换成前端路由 → 动态注册。

关键步骤(高层链路):

2.2 按钮权限(操作级)

  • 目标:同一页面内,不同角色看到不同操作按钮。
  • 推荐做法:统一以权限点控制,避免仅靠角色名判断。
vue
<template>
  <el-button v-hasPerm="['sys:user:add']">新增</el-button>
  <el-button v-hasPerm="['sys:user:delete']">删除</el-button>
</template>

2.3 角色权限(RBAC)

  • 角色是权限集合的“分发单位”。
  • 业务上应避免直接给用户堆权限点,应通过角色分配。

2.4 数据权限(范围级)

  • 目标:同样一个查询接口,不同用户只能看到“自己的范围”。
  • 数据权限必须在后端生效,前端只负责展示/选择。

建议你阅读:

3. 权限点命名与对齐建议

  • 权限点必须稳定、可追踪(例如 sys:user:add)。
  • 菜单/按钮/接口尽量同源:
    • “按钮显示”与“接口可调用”应一致。
    • 避免出现:按钮隐藏但接口仍可被调用。

4. 常见问题排查

  • 路由生成了但页面进不去:检查路由 name 是否唯一;检查后端返回的 component 映射是否存在。
  • 按钮权限不生效:确认 v-hasPerm 使用的权限点在用户权限集合中;确认权限集合更 新后是否需要重新登录/刷新权限缓存。
  • 侧边栏菜单不显示:检查菜单类型(目录/菜单/按钮);检查 hidden/visible 配置 。

相关链接

基于 MIT 许可发布