用户、角色与部门

RustPBX 把四种容易混淆的身份概念分得很清楚。理清它们的映射关系,能避免大部分权限配置错误。

身份是什么认证方式用途
分机 (Extension)SIP 端点(话机/软终端/机器人)SIP digest / JWT通话、注册
用户 (User)控制台登录账号密码 / 外部 IdPWeb 控制台、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. 注册策略

设置效果
开放注册任何能访问控制台的人都能注册(仅用于初始化)
首用户超管第一个账号获得全部权限
关闭注册仅管理员可创建用户

创建管理员账号后请关闭注册。首启流程见基础安装。