增加企业级角色的影响分析
当前角色体系
角色是数值层级结构,值越大权限越高:
┌────────────────┬─────┬────────────┐
│ 常量 │ 值 │ 说明 │
├────────────────┼─────┼────────────┤
│ RoleGuestUser │ 0 │ 访客 │
├────────────────┼─────┼────────────┤
│ RoleCommonUser │ 1 │ 普通用户 │
├────────────────┼─────┼────────────┤
│ RoleAdminUser │ 10 │ 管理员 │
├────────────────┼─────┼────────────┤
│ RoleRootUser │ 100 │ 超级管理员 │
└────────────────┴─────┴────────────┘
系统大量使用 >= 比较来判断权限,比如 role >= 10 即为管理员。因此新角色的数值选择直接决定了它拥有哪些权限。
需要变动的地方(共 7 大块)
- 常量定义 — common/constants.go
- 新增 RoleEnterpriseUser = ?(如 5 介于普通和管理员之间,或 50 介于管理员和 Root 之间)
- 更新 IsValidateRole() 函数加入新角色
- 后端权限中间件 — middleware/auth.go
- authHelper() 用 role < minRole 做层级判断,数值本身会自动生效
- 但可能需要新增一个 EnterpriseAuth() 中间件工厂,类似 AdminAuth() / RootAuth()
- validUserInfo() 调用了 IsValidateRole(),改了常量就自动生效
用户管理控制器 — controller/user.go
这是改动最多的地方:
- 角色层级校验(约 6 处):myRole <= user.Role 的比较,决定谁能管理谁
- promote/demote 操作(L900-919):当前只支持 common ↔ admin,需新增企业角色的升降级逻辑
- 用户创建(L828):user.Role >= myRole 的校验
- 权限计算 calculateUserPermissions()(L424-449):需定义企业角色能看到哪些功能
- 侧边栏配置 generateDefaultSidebarConfig()(L452-511):需定义企业角色的默认侧边栏
- 用户模型 — model/user.go
- IsAdmin()(L716):role >= RoleAdminUser — 企业角色是否算管理员?
- generateDefaultSidebarConfigForRole()(L99-158):需增加企业角色的 if 分支
- GetRootUser() / RootUserExists() 不受影响
- 其他后端引用
- service/user_notify.go:29:通知查询 role >= RoleAdminUser,企业角色是否需要收到管理通知?
- controller/group.go:38:role == RoleCommonUser 限制切组,企业角色要不要允许?
- controller/twofa.go:524:2FA 管理的角色权限校验
- 前端角色判断 — 硬编码数值
- 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() 工具函数,或调整现有判断逻辑
- 路由层 — router/api-router.go
管理路由用 AdminAuth() 保护,可能需要新增企业角色专属路由或调整中间件
关键决策点(编码前必须确定)
- 数值选多少? — 决定了它在层级中的位置
- 5:在普通用户之上、管理员之下(有部分管理能力但不是完整管理员)
- 50:在管理员之上、Root 之下(比管理员权限更大)
- 企业角色能做什么? — 比如:
- 能否看到/管理渠道、模型、兑换码、用户?
- 能否访问系统设置?
- 能否切换分组?
- 是否接收管理通知?
- 谁能分配企业角色? — 只有 Root?还是 Admin 也可以?
- promote/demote 流程怎么走? — common → enterprise → admin → root 四级,还是只允许特定路径?