Apollo 技术文档Apollo 技术文档
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
指南
  • 架构概述
  • BigWorld 架构深度解析
  • BigWorld 进程架构与玩家生命周期
  • AOI九宫格系统详解
  • AOI广播与消息去重
  • Base 模块
  • Core 模块
  • Runtime 模块
  • Data 模块
  • Network 模块
  • /modules/actor.html
  • Game 模块
  • BigWorld 模块
服务器应用
API 参考
QA
GitHub
  • MMORPG 架构 QA

Q86: 如何设计权限系统?

核心结论

权限系统不是“给用户贴几个角色标签”,而是把“谁能对什么对象执行什么操作”表达清楚,并且能被服务端稳定验证。

真正需要先想清楚的是:

  • 权限作用于哪些资源
  • 权限是角色级、对象级还是上下文级
  • 谁负责做最终校验
  • 高风险操作如何审计

如果这些边界不清晰,权限系统很快就会变成零散的 if 判断集合。

一、先分清权限控制的对象

常见对象包括:

  • 玩家自己的角色数据
  • 后台管理能力
  • GM 操作
  • 公会、队伍、拍卖等组织或共享资源

这些对象的权限模型差别很大,不适合一刀切。

二、角色模型只是起点,不是全部

RBAC 很常见,但在游戏里通常还不够。

因为很多权限不是“你是不是 GM”这么简单,而是:

  • 你是不是当前公会会长
  • 你是不是这封邮件的接收者
  • 你是不是这个对象的拥有者

也就是说,很多权限是对象上下文相关的。

三、服务端必须做最终鉴权

客户端展示层可以决定按钮是否可点,但不能作为最终权限判断。

服务端至少要确认:

  • 调用者身份
  • 操作目标
  • 当前上下文是否合法

否则越权只需要绕过客户端界面即可。

四、高风险操作需要额外约束

例如:

  • 封号
  • 发奖
  • 改资产
  • 批量执行命令

这类操作通常应具备:

  • 最小权限
  • 双重确认或更严格审批
  • 审计日志

否则后台误操作的风险会非常高。

五、权限系统要和审计系统一起设计

权限不是只看“能不能做”,还要看“做了之后能不能追溯”。

更稳妥的做法通常是记录:

  • 谁执行的
  • 对谁执行
  • 执行了什么
  • 何时执行
  • 是否成功

这样权限系统才能真正承担治理职责。

六、工程上更稳妥的组织方式

常见做法是:

  • 身份认证系统确认“你是谁”
  • 权限系统判断“你能做什么”
  • 资源层判断“你对这个对象是否有权”
  • 审计系统记录“你实际做了什么”

这四层不要混在一起。

七、常见误区

1. 权限系统就是 RBAC

RBAC 很常见,但对象级和上下文级权限在游戏里同样重要。

2. 前端把按钮隐藏了就算没权限

不对。最终校验必须在服务端。

3. 只有后台系统才需要权限设计

公会、队伍、交易、共享资源同样有权限边界。

参考资料

  • RBAC、ABAC 和高风险操作审计实践资料
在 GitHub 上编辑此页
最后更新: 3/20/26, 6:06 AM
贡献者: cuihairu