增加企业级角色的影响分析

当前角色体系

角色是数值层级结构,值越大权限越高:

┌────────────────┬─────┬────────────┐
│ 常量 │ 值 │ 说明 │
├────────────────┼─────┼────────────┤
│ RoleGuestUser │ 0 │ 访客 │
├────────────────┼─────┼────────────┤
│ RoleCommonUser │ 1 │ 普通用户 │
├────────────────┼─────┼────────────┤
│ RoleAdminUser │ 10 │ 管理员 │
├────────────────┼─────┼────────────┤
│ RoleRootUser │ 100 │ 超级管理员 │
└────────────────┴─────┴────────────┘

系统大量使用 >= 比较来判断权限,比如 role >= 10 即为管理员。因此新角色的数值选择直接决定了它拥有哪些权限。
需要变动的地方(共 7 大块)

  1. 常量定义 — common/constants.go
  • 新增 RoleEnterpriseUser = ?(如 5 介于普通和管理员之间,或 50 介于管理员和 Root 之间)
  • 更新 IsValidateRole() 函数加入新角色
  1. 后端权限中间件 — middleware/auth.go
  • authHelper() 用 role < minRole 做层级判断,数值本身会自动生效
  • 但可能需要新增一个 EnterpriseAuth() 中间件工厂,类似 AdminAuth() / RootAuth()
  • validUserInfo() 调用了 IsValidateRole(),改了常量就自动生效
  1. 用户管理控制器 — controller/user.go

    这是改动最多的地方:

  • 角色层级校验(约 6 处):myRole <= user.Role 的比较,决定谁能管理谁
  • promote/demote 操作(L900-919):当前只支持 common ↔ admin,需新增企业角色的升降级逻辑
  • 用户创建(L828):user.Role >= myRole 的校验
  • 权限计算 calculateUserPermissions()(L424-449):需定义企业角色能看到哪些功能
  • 侧边栏配置 generateDefaultSidebarConfig()(L452-511):需定义企业角色的默认侧边栏
  1. 用户模型 — model/user.go
  • IsAdmin()(L716):role >= RoleAdminUser — 企业角色是否算管理员?
  • generateDefaultSidebarConfigForRole()(L99-158):需增加企业角色的 if 分支
  • GetRootUser() / RootUserExists() 不受影响
  1. 其他后端引用
  • service/user_notify.go:29:通知查询 role >= RoleAdminUser,企业角色是否需要收到管理通知?
  • controller/group.go:38:role == RoleCommonUser 限制切组,企业角色要不要允许?
  • controller/twofa.go:524:2FA 管理的角色权限校验
  1. 前端角色判断 — 硬编码数值
  • web/src/helpers/utils.jsx — isAdmin() 用 role >= 10,isRoot() 用 role >= 100
  • web/src/helpers/auth.jsx:59 — AdminRoute 用 role >= 10
  • web/src/components/layout/SiderBar.jsx — 多处调用 isAdmin() / isRoot() 控制菜单显隐
  • web/src/components/settings/personal/components/UserInfoHeader.jsx — 显示角色标签
  • web/src/pages/Setting/index.jsx:60 — 系统设置页只对 isRoot() 可见
  • 需要新增 isEnterprise() 工具函数,或调整现有判断逻辑
  1. 路由层 — router/api-router.go
  • 管理路由用 AdminAuth() 保护,可能需要新增企业角色专属路由或调整中间件

    关键决策点(编码前必须确定)

  1. 数值选多少? — 决定了它在层级中的位置
    • 5:在普通用户之上、管理员之下(有部分管理能力但不是完整管理员)
    • 50:在管理员之上、Root 之下(比管理员权限更大)
  2. 企业角色能做什么? — 比如:
    • 能否看到/管理渠道、模型、兑换码、用户?
    • 能否访问系统设置?
    • 能否切换分组?
    • 是否接收管理通知?
  3. 谁能分配企业角色? — 只有 Root?还是 Admin 也可以?
  4. promote/demote 流程怎么走? — common → enterprise → admin → root 四级,还是只允许特定路径?