如何设计操作权限菜单_mysql后台系统设计

1次阅读

mysql后台权限设计采用rbac模型,通过users、roles、permissions等五张表解耦控制;菜单按“资源+操作”绑定permission_code;需额外实现数据级权限与操作留痕审计。

如何设计操作权限菜单_mysql后台系统设计

设计 MySQL 后台系统的操作权限菜单,核心是把“谁能在哪类数据上做什么”这件事理清楚、落得实。不是功能,而是靠数据表结构 + 逻辑控制 + 前端联动,让权限真正可配、可查、可审计。

权限模型选 RBAC,别手写 if-else

用基于角色的访问控制(RBAC)是行业共识。它把用户、角色、权限、资源四者解耦,避免硬编码权限判断。MySQL 后台系统里,典型表结构包括:

  • users:存用户基本信息(id、username、status)
  • roles:存角色(admin、editor、viewer、audit)
  • permissions:存细粒度操作权限(如 ‘user:read’、’order:delete’、’log:export’)
  • role_permissions:中间表,关联角色与权限
  • user_roles:关联用户与角色(支持多角色)

不建议把权限字段直接加到 users 表里——改个权限就得改表结构或写一堆 case;也不建议每个接口都手动查用户有没有某权限——重复逻辑多、易漏、难审计。

菜单结构按“资源+操作”两级设计

后台左侧菜单不是纯导航,而是权限的可视化出口。菜单项应对应真实可操作的资源节点,比如:

  • 用户管理 → 展开后有「列表」「新增」「编辑」「禁用」四个子项
  • 订单查询 → 子项为「列表」「导出」「详情」
  • 系统日志 → 子项为「查看」「清空」(后者需更高权限)

每个子项背后绑定一个 permission_code,如 ‘user:update’、’order:export’。前端渲染菜单时,只展示当前用户角色已授权的菜单项;后端接口也必须校验同一 permission_code,防止绕过前端直接调用。

MySQL 数据权限要单独处理(行级/列级)

功能权限(能进哪个页面)只是基础。MySQL 后台常涉及敏感数据隔离,比如:

  • 不同分公司只能看自己库里的 user 表
  • 客服只能查手机号,不能看身份证号
  • 财务能看到金额,运营只能看脱敏后的订单号

这类控制无法靠 role_permissions 解决,需额外设计:

  • rolesuser_profiles 表中加字段如 data_scope_type(all / dept / custom)、allowed_databasesallowed_tables
  • 查询前动态拼接 WHERE 条件,例如:WHERE tenant_id = ? 或 select id, name, phone FROM user —— 不查 id_card 字段
  • 用视图(VIEW)封装常用脱敏查询,权限控制落到视图上

权限变更要留痕,且支持快速回滚

后台权限一旦配错,可能引发越权或锁死。所以每次角色授权、用户加角色、权限删除,都必须记日志:

  • 记录操作人、目标角色/用户、变更的 permission_ids、操作时间、IP
  • 提供「权限变更历史」页面,支持按时间、人员、角色筛选
  • 关键操作(如给 viewer 角色加上 ‘config:write’)触发短信/钉钉告警
  • 保留最近 7 天的权限快照,支持一键还原到某时刻状态

不复杂但容易忽略。

text=ZqhQzanResources