用户、角色与部门
RustPBX 把四种容易混淆的身份概念分得很清楚。理清它们的映射关系,能避免大部分权限配置错误。
| 身份 | 是什么 | 认证方式 | 用途 |
|---|---|---|---|
| 分机 (Extension) | SIP 端点(话机/软终端/机器人) | SIP digest / JWT | 通话、注册 |
| 用户 (User) | 控制台登录账号 | 密码 / 外部 IdP | Web 控制台、REST API |
| 坐席 (Agent) | 绑定分机的 CC 坐席档案 | CC Phone 认证(JWT / token / SIP) | ACD、话务台、在线状态 |
| API Token | 机器凭证 | Bearer token | 自动化、集成 |
分机没有控制台登录;用户没有队列在线状态;坐席通常绑定分机——但绑定是显式的,不是隐含的。
1. 控制台用户
**首个注册用户自动成为超级管理员。**团队初始化完成后应关闭自助注册:
[console]
allow_registration = false
用户有两个权限标志:
| 标志 | 含义 |
|---|---|
is_staff | 可访问管理控制台区域 |
is_superuser | 完全权限,跳过权限检查 |
权限按「模块 + 动作」检查(extensions:write、trunks:write、routes:write、extensions:read 等)——只读的 NOC 账号可以看诊断,但改不了中继。
2. 角色与权限
角色把权限集合打包,这样分配的是「岗位」而不是「接口」:
| 角色(示例) | 权限 |
|---|---|
| NOC / 只读 | 诊断、通话记录、报表、指标 |
| 电话系统管理员 | 分机、中继、路由、队列 |
| 计费 | wholesale 计费、发票、报表 |
| CC 主管 | CC 监控、坐席、技能组、报表 |
变更类 API 与控制台执行同一套权限,因此计费角色即使直接调 API 也无法 PATCH 中继。
3. 部门
部门用于分组分机,便于筛选、报表与通讯录:
- 多对多成员关系(
extension_departments)——一个分机可属于多个部门 - 分机列表可按部门筛选
- 报表与通讯录按部门分组
部门用来表达组织结构,权限交给角色。
4. API Token
自动化不应以某个人的身份登录。用显式 scope 的静态令牌:
[console]
api_tokens = [
{ token = "pbx-api-token-xxxx", scopes = ["call.control", "recording"], description = "CRM 集成" },
{ token = "pbx-monitor-token-yyyy", scopes = ["diagnostics"], description = "监控系统" },
]
- 通过
Authorization: Bearer <token>发送 - scope 控制能力:
call.control、recording、diagnostics、routing、extension、sip_trunk等 - 令牌请求跳过 CSRF(非 Cookie 认证),并纳入审计
- 令牌在控制台 API 树中被视为合成超级用户——因此 scope 必须收紧
经验法则:每个集成一个令牌、最小 scope、人员变动即轮换、不要跨不同影响范围的系统复用。
5. Wholesale 租户访问
Wholesale 在角色之上增加租户层:销售用户可被限定到特定租户账号(sales_tenant_access),因此合作伙伴经理只能看到自己客户的余额与话单。配合按租户的费率表与路由策略,隔离在数据层与配置层生效,而不仅是界面上的隐藏。
6. 注册策略
| 设置 | 效果 |
|---|---|
| 开放注册 | 任何能访问控制台的人都能注册(仅用于初始化) |
| 首用户超管 | 第一个账号获得全部权限 |
| 关闭注册 | 仅管理员可创建用户 |
创建管理员账号后请关闭注册。首启流程见基础安装。