# 蓝鲸CMDB权限体系从零搭建：独立用户管理、角色授权与SSO落地

- 发布日期: 2025-07-30 · 分类: Technology

做蓝鲸 CMDB 定制开发这几年，我碰到最多的需求不是"加个字段"或者"改个展示"，而是权限。默认装完 CMDB 就一个用户，所有操作全走同一个账号，权限粒度粗到没法看。企业一上生产，安全团队第一个问题就是"你们谁能删模型、谁能改实例"，答不上来。社区版连用户和角色管理都没有，想接公司统一的 OIDC/OAuth2 做单点登录？得自己从头搭。

我最近花了一个多月，把这套东西从后端到前端完整做了一遍。不是打补丁，是独立模块。今天把过程拆开讲。

![定制化用户管理界面](https://aicyber.de5.net/sites/blog-252d6582/shared/images/screenshot-20250730-bk-cmdb-permission.webp)

![角色权限配置界面](https://aicyber.de5.net/sites/blog-252d6582/shared/images/screenshot-20250730-bk-cmdb-permission-role.webp)

## 做出来之后长什么样

跟原生 CMDB 比，多出来的核心能力有四块：

- **独立的用户管理中心**：创建、编辑、查询、禁用用户，全部在一个页面里完成。不用再去外部系统翻来翻去。
- **角色与权限指派**：自定义角色数量不限。我实际配过「DBA」「网络管理员」「应用负责人」这些角色，每个角色对模型、实例、业务乃至系统功能的增删改查都能单独勾选。
- **OIDC 认证**：原生集成 OpenID Connect 协议，对接 Authing、Okta 这类企业内部统一身份认证服务，单点登录直接跑通。
- **全新前端界面**：Vue.js 技术栈从头写的管理界面，交互逻辑我反复调过，管理员用起来比原生顺手不少。

这次定制我判断最核心的难点不在某个单点，而在于它贯穿了整个技术栈。API 服务、数据流、中间件、前端路由、状态管理、容器化部署，每个环节都得动，而且环环相扣。

### 后端（Golang）

- 新增完整的 User Management 服务模块。coreservice 和 web_server 里写入了超过 2000 行核心逻辑，承接所有用户、角色、权限相关的 API 请求。
- 为对接 OIDC 单独写了 oidc.go 服务，同时重构了 login.go，让它能动态处理多种登录模式。
- 设计了全新的 user_management 数据模型，配套 user_management_init.go 数据库迁移脚本。我踩过一次坑：迁移脚本没做好兼容性处理，灰度环境直接炸了，后来加了回滚逻辑才稳。

- 新建 user-management 视图目录，包含用户列表、角色管理、权限配置、用户表单等 7 个核心 Vue 组件，总代码量超 1500 行。
- 权限状态比较复杂，我单独拆了 role-permission.js 和 user-management.js 两个 Vuex 模块，专管权限数据的获取、变更与缓存。
- 另外写了 permission.js 工具函数和 v-permission 自定义指令，模板里控制显隐就一行指令的事，比到处写 v-if 干净很多。

为了让整套东西在容器化环境里能直接跑，我更新了数十个 Helm Chart 配置文件（values.yaml、configmap.yaml 等），确保新增服务和配置能被 Kubernetes 正确接管。这部分工作量不大但容易漏，漏一个 configmap 字段就是线上 502。

## 为什么我觉得这事值得做

技术最终得落到业务上。我实测下来，这套东西带来的变化很具体：

- 安全性上，按角色精确授权，遵循最小权限原则，误操作和越权访问的风险被压到很低。
- 效率上，权限划分清晰之后，管理员不用再对着配置文件手动改，日常运维时间省了不少。
- 集成上，跟企业现有认证体系打通后，员工登录流程简化了，审计日志也能统一收口。

我在 CMDB 领域做了几年，从 0 到 1 完整交付过这类项目。如果你这边有进一步的需求——开发全新的业务功能模块、集成企业内部其他系统、深度性能优化与二次开发、或者需要专业的技术咨询——都可以直接找我聊。

📧 邮箱： [email protected]

💬 微信：winnielove2020

