14.4 用户管理
用户管理通过管理控制台 → 用户管理访问,涵盖用户、角色和单点登录(SSO)配置。
14.4.1 用户
TDengine IDMP 使用电子邮件地址作为用户 ID。首位激活或注册系统的用户自动成为超级管理员。
14.4.1.1 邀请用户
添加新用户时,请前往管理控制台 → 用户管理 → 用户,点击右上角的 + 按钮,填写以下字段:
| 字段 | 说明 |
|---|---|
| 邮箱 | 新用户的电子邮件地址(用作登录 ID) |
| 角色 | 分配的一个或多个角色,每个角色可配置可访问的元素范围 |
被邀请的用户将收到一封电子邮件,其中包含设置个人信息和密码的链接。系统会先创建一个状态为已邀请的账户;用户完成激活后,账户状态才会变为已激活。
用户列表显示以下信息:
| 列 | 说明 |
|---|---|
| 名 | 用户名字 |
| 姓 | 用户姓氏 |
| 电话号码 | 可选电话号码 |
| 邮箱 | 电子邮件地址(用作用户 ID) |
| 状态 | 账户状态(如:已激活、已邀请) |
| 角色 | 已分配的角色 |
| 描述 | 可选描述 |
14.4.1.2 按角色分配控制元素访问权限
为用户分配角色时,可限制该用户在该角色下可访问的元素范围。操作方式为:点击角色行的可访问元素列,打开资源配置对话框。
对话框包含两个面板:
- 左侧面板: 完整的元素树。勾选要授权访问的顶层元素节点。勾选某节点后,用户即可访问该节点及其层级下的所有元素。
- 右侧面板: 已选元素的实时预览。
示例: 若为用户分配数据分析师角色,并在资源配置对话框中仅勾选公用事业,则该用户只能查看和操作公用事业元素子树,对其他顶层元素(如油田)无可见性。未选中的元素在资产树中完全隐藏——不会出现在资源浏览器或任何相关仪表盘、分析或事件中。
用户可持有多个角色,每个角色有独立的元素访问配置。用户的有效元素访问权限是所有角色授权顶层节点的并集。
可供分配的内置角色:
| 角色 | 典型用途 |
|---|---|
| 工厂经理与主管 | 生产资产的运营监管 |
| IT/OT 系统管理员 | 基础设施与系统配置 |
| 维护人员 | 设备维护与工单管理 |
| 数据分析师 | 数据探索、仪表盘与报表 |
| 运营人员 | 日常工厂操作 |
| 工艺工程师 | 工艺优化与分析 |
| 超级管理员 | 完整的系统管理权限 |
14.4.1.3 密码重置
任何用户均可在登录页面点击忘记密码来重置自己的密码,系统将通过电子邮件发送重置链接。只有状态为已激活的用户可以接收密码重置邮件。出于安全考虑,超级管理员无法直接替其他用户重置密码。
请确保部署配置中的 tda.server-url 配置为可从外部访问的 URL 或 IP 地址。若配置不正确,被邀请的用户将无法通过邮件链接访问 IDMP。
14.4.2 用户组
用户组用于将一组用户进行统一管理,并批量分配角色。除平铺分组外,用户组还支持构建树状层级(例如:集团 → 事业部 → 工厂 → 车间),用于映射真实组织结构并按层级继承权限。
14.4.2.1 创建与编辑用户组
在管理控制台 → 用户管理 → 用户组中,点击 + 创建用户组,或在列表中编辑现有用户组。常用字段如下:
| 字段 | 说明 |
|---|---|
| 名称 | 用户组名称。要求同一父组下名称唯一;不同分支可同名。 |
| 描述 | 可选说明,便于区分业务用途。 |
| 父组 | 可选。用于构建用户组层级结构。未选择时表示根组。 |
创建或编辑时可一并维护成员和角色,保存后统一生效。创建子组后,该组成员可继承父组及上级组授予的角色权限。
14.4.2.2 用户组成员管理
在用户组详情或编辑页的成员区域,可执行以下操作:
- 添加成员:将一个或多个用户加入当前用户组。
- 移除成员:将用户从当前用户组移出。
成员变更后,用户通过该组获得的权限会随之更新。
14.4.2.3 用户组角色管理
在用户组详情或编辑页的角色区域,可为用户组分配或移除角色:
- 分配角色后,组内成员将继承该角色。
- 移除角色后,成员将失去通过该组继承的该角色权限。
用户可以同时属于多个用户组,其最终权限为所有来源权限的并集。
当同一用户通过多个用户组路径获得角色时,系统会合并其可用权限。
14.4.2.4 层级与删除规则
用户组支持父子层级,适用于集团、工厂、车间等组织结构。使用时请注意:
- 子组可继承父组授予的角色权限。
- 支持将用户组移动到新的父组下,以便适配组织调整。
- 不允许将用户组移动到其自身或子孙组之下。
- 删除用户组前需先处理其子组;有子组时不能直接删除父组。
- 建议按“先子组、后父组”的顺序进行清理与调整。
14.4.2.5 用户视角的用户组归属
在用户详情页可查看该用户所属用户组信息,包括直接归属与继承归属。在编辑用户时,可将用户加入或移出指定用户组,以便从用户视角统一调整组织归属与权限来源。
14.4.3 角色
IDMP 使用基于角色的访问控制(RBAC)。每个角色对一种或多种资源类型授予查看、新增、删除和编辑权限。用户可持有多个角色,其有效权限为所有已分配角色的并集。
系统内置多个角色,也可在角色列表页点击 + 创建自定义角色。
角色权限涵盖的资源包括: 元素模板、AI 功能、事件模板、枚举集、分析、外部表、邮件配置、通知规则模板、仪表盘模板、数据备份、仪表盘、元素、OAuth、用户、角色、计量单位(UOM)、面板模板、数据导入等。
14.4.3.1 元素级访问控制
由于元素以树形层级组织,元素访问权限与其他权限分开控制。即使角色授予了对元素的总体访问权,每个用户的元素可见范围还会进一步限定在邀请或编辑用户时配置的特定顶层节点。
用户无法访问的元素在资产树中完全不可见——不会以折叠节点的形式出现。与不可访问元素关联的属性、分析、事件、面板和仪表盘同样被隐藏,从而实现跨团队、站点或业务单元的强数据隔离。
14.4.4 单点登录(OAuth 2.0)
IDMP 支持 OAuth 2.0 单点登录。OAuth 配置通过管理控制台 → 用户管理 → OAuth 进行管理。登录页会从后台读取已配置的 OAuth 提供方列表,并根据每个提供方的授权地址、客户端 ID、回调地址和 Scope 发起授权请求。
14.4.4.1 创建 OAuth 配置
点击 + 添加新的 OAuth 提供商,填写以下字段:
| 字段 | 必填 | 说明 |
|---|---|---|
| 图标 | 是 | 提供商 Logo 图片,显示在登录页面。仅支持 png/jpg/jpeg/gif/webp,且文件大小必须小于 1 MB。 |
| 名称 | 是 | OAuth 选项的显示名称(如 GitHub、Lark、ADFS)。 |
| 类型(User Info Mapping Type) | 是 | 选择 GitHub、Lark、ADFS 或 Custom。该字段决定 IDMP 如何获取并解析用户信息。 |
| 客户端 ID | 是 | 在 OAuth 提供商处注册的应用程序标识符。 |
| 客户端密钥 | 是 | 从 OAuth 提供商开发者控制台获取的密钥。 |
| 授权 URL | 是 | OAuth 2.0 授权端点 URL(http:// 或 https://)。 |
| Token URL | 是 | Token 交换端点 URL(http:// 或 https://)。 |
| 用户信息 URL | 非 ADFS 必填 | 获取用户档案信息的端点。ADFS 类型可留空。 |
| 回调 URL | 是 | 在 OAuth 提供商处注册的回调 URL,通常配置为 IDMP 前端登录回调页,如 https://<idmp-host>/login/back。 |
| 范围(Scope) | 否 | 请求的权限范围。ADFS 类型必须包含 openid,建议使用 openid profile email。 |
| 自定义映射规则 | Custom 时必填 | 定义 JSONPath 表达式以提取 name、email 及可选字段的 JSON 对象。 |
| 角色 | 是 | 通过该 OAuth 提供商登录的用户所分配的角色。 |
14.4.4.2 不同类型的处理方式
| 类型 | 用户信息来源 | 特殊要求 |
|---|---|---|
| GitHub | 调用 User Info URL,再按内置 GitHub 解析逻辑提取用户信息。 | User Info URL 必填。 |
| Lark | 调用 User Info URL,再按内置 Lark 解析逻辑提取用户信息。 | User Info URL 必填。 |
| ADFS | 从 Token 响应中的 id_token 读取声明,并通过 OIDC 发现和 JWKS 验签。 | User Info URL 留空;Scope 必须包含 openid。 |
| Custom | 调用 User Info URL,再按自定义 JSONPath 规则提取用户信息。 | User Info URL 与自定义映射规则必填,且自定义映射规则必须包含 name 和 email。 |
14.4.4.3 自定义映射规则
当用户信息映射类型为 Custom 时,提供一个将字段名映射到 JSONPath 表达式的 JSON 对象:
{
"name": "$.username",
"email": "$.email",
"nickname": "$.display_name",
"description": "$.bio",
"phone": "$.contact.mobile"
}
支持的字段为 name、email、nickname、description 和 phone。其中 name 与 email 为必填项,其余字段为可选项。
14.4.4.4 ADFS 配置要点
对于 ADFS 类型,建议按照以下方式配置:
Authorize URL: https://adfs.example.com/adfs/oauth2/authorize
Token URL: https://adfs.example.com/adfs/oauth2/token
Redirect URL: https://<idmp-host>/login/back
Scope: openid profile email
当前实现会基于配置的 Authorize URL 或 Token URL 自动推导 ADFS 的 /.well-known/openid-configuration,再读取 issuer 和 jwks_uri 拉取 JWKS,并校验 id_token 的以下内容:
- 签名
issaud(必须匹配Client ID)exp- 可选
nbf
ADFS 的用户字段映射规则是固定的:
- 邮箱:优先读取
upn,如果没有则回退到email - 显示名:优先拼接
given_name + family_name,如果缺少given_name则回退到unique_name - 昵称:读取
unique_name
14.4.4.5 OAuth 登录与自动建号
当前实现中的 OAuth 登录行为如下:
- 登录页使用配置的
authorize_url、client_id、redirect_url和scope组装授权请求。 - OAuth 提供方回调到
redirect_url后,IDMP 前端会提取code和state,再调用 IDMP 后端完成登录。 - OAuth 提供方必须返回有效的
email和name;任一缺失或邮箱格式非法,登录都会失败。 - 如果系统中已存在相同邮箱的可用用户,IDMP 会直接复用该账号,不会再创建新用户。
- 如果系统中不存在该邮箱,IDMP 会自动创建一个状态为已激活的 OAuth 用户,并授予此 OAuth 配置中预先选择的角色。
- 已删除或已禁用的用户不能通过 OAuth 登录。
14.4.4.6 可选部署配置
以下配置会影响登录页与 OAuth 的最终行为:
| 配置项 | 作用 |
|---|---|
tda.sso-login-first | 登录页自动跳转到第一个可用的 OAuth 提供方。 |
tda.sso-login-silent | 自动跳转时附加 prompt=none,适合静默 SSO 尝试。 |
tda.oauth.tls-configuration-name | 指向 quarkus.tls.<name> 命名 TLS 配置,用于 OAuth/ADFS HTTPS 证书校验。若未配置,则使用 JVM 默认信任库和主机名校验。 |
如果 OAuth 或 ADFS 端点使用私有 CA 或自签名证书,可以显式指定 TLS 配置。例如:
tda:
oauth:
tls-configuration-name: oauth-client
quarkus:
tls:
oauth-client:
trust-all: true
trust-all: true 仅建议用于测试环境。生产环境请改为配置受信任证书库,而不是关闭证书校验。
14.4.4.7 配置步骤
- 在 OAuth 提供商的开发者控制台中注册应用程序,获取客户端 ID、客户端密钥,并配置回调 URL。
- 将回调 URL 配置为 IDMP 前端登录回调页,例如
https://<idmp-host>/login/back,并确保与提供商控制台中的注册值完全一致。 - 在 IDMP 中,前往管理控制台 → 用户管理 → OAuth,点击 +。
- 选择合适的类型并填写配置:
ADFS:User Info URL留空,Scope中必须包含openidCustom:补充User Info URL和自定义映射规则
- 上传图标、分配角色并保存。
- 退出登录,验证新的登录选项是否出现在登录页面,并确认首次 OAuth 登录是否按预期复用现有账号或自动创建新账号。
14.4.4 LDAP
IDMP 支持通过 LDAP 协议对接企业目录服务(如 Active Directory、OpenLDAP),实现用户同步和统一认证。LDAP 配置通过管理控制台 → 用户管理 → LDAP 进行管理。
14.4.4.1 配置 LDAP 连接
在 LDAP 页面点击编辑按钮,填写以下字段:
| 字段 | 必填 | 说明 |
|---|---|---|
| 启用 | — | 开启或关闭 LDAP 认证。关闭后 LDAP 用户同步和 LDAP 登录均不可用。 |
| URL | 是 | LDAP 服务器地址,例如 ldap://localhost:389 或 ldaps://localhost:636。 |
| 绑定 DN | 否 | 用于搜索用户的 LDAP 绑定账号 DN,例如 cn=admin,dc=taosdata,dc=com。若 LDAP 服务器允许匿名搜索可留空。 |
| 密码 | 否 | 绑定 DN 对应的密码。密码在数据库中加密存储,编辑时显示为掩码。 |
| 搜索基准 DN | 是 | 用户搜索的起始节点,例如 dc=taosdata,dc=com。 |
| 登录属性 | 是 | LDAP 中用于登录的属性名,默认为 uid。若设为 mail,用户可直接使用邮箱登录。 |
| 搜索过滤器 | 是 | 额外的 LDAP 搜索条件,例如 (objectClass=inetOrgPerson)。 |
| 角色 | 是 | 同步用户时自动分配的默认角色。每个角色可配置可访问的元素范围。 |
配置完成后点击保存。保存时密码字段若显示为掩码(********),表示保留原密码不变;清空则移除密码。
14.4.4.2 同步用户
点击 同步所有用户 按钮,IDMP 会使用配置的绑定 DN 连接 LDAP 服务器,按搜索基准 DN 和搜索过滤器检索所有用户条目,并将它们同步到 IDMP。
LDAP 属性到 IDMP 用户字段的映射:
| LDAP 属性 | IDMP 字段 | 说明 |
|---|---|---|
登录属性(如 uid) | 登录名(loginName) | 由"登录属性"配置决定取哪个 LDAP 属性 |
mail 或 EmailAddress | 邮箱(email) | 必须存在,否则该用户跳过同步 |
givenName、cn 或登录属性 | 名(firstname) | 按优先级依次尝试,回退到登录名 |
sn | 姓(lastname) | 可选 |
mobile、Telephone 或 telephoneNumber | 电话(phone) | 按优先级依次尝试 |
| DN(Distinguished Name) | 描述(description) | 用户在 LDAP 中的完整 DN |
同步逻辑:
- 若 IDMP 中已存在相同登录名的用户且登录类型为 LDAP,则更新该用户信息。
- 若 IDMP 中已存在相同登录名但登录类型为本地用户,则跳过该 LDAP 用户(不会覆盖本地账号)。
- 若 IDMP 中不存在匹配用户,则创建新的 LDAP 用户,并授予配置的默认角色。
- 若 IDMP 中不存在相同登录名但存在相同邮箱的 LDAP 用户,也会匹配并更新。
- LDAP 中已删除的用户在同步时不会自动从 IDMP 删除。
14.4.4.3 LDAP 用户登录
LDAP 用户在登录页面输入登录名(或邮箱)和密码进行登录。IDMP 的登录流程如下:
- 先按登录名查找 IDMP 用户。
- 若未找到且输入值包含
@,再按邮箱查找 LDAP 类型的用户。 - 找到用户后,若登录类型为 LDAP,则使用输入的凭据向 LDAP 服务器发起绑定认证。
- LDAP 认证成功后,IDMP 签发 JWT 令牌完成登录。
LDAP 用户的密码存储在 LDAP 服务器端,IDMP 不保存 LDAP 用户的密码。



