用户同步
从数据库、HTTP 接口或 LDAP 同步用户、部门、角色、岗位到平台,含三步配置、字段映射、定时同步、熔断与管理端接口,并说明第三方嵌入时的自动建号。
概述
用户同步把企业已有系统里的组织架构和人员批量导入 Sight Report,避免手工维护两套账号。支持同步四类对象:用户、部门、角色、岗位,数据来源可以是关系数据库、HTTP 接口或 LDAP/AD 服务器。
用户接入的方式有两种:
| 方式 | 适用场景 |
|---|---|
| 批量同步(本文) | 平台需要提前拥有用户与部门,用于登录、授权、按部门分配数据权限 |
| 嵌入时自动建号 | 第三方系统用签名嵌入报表,首次访问时按外部账号自动创建平台账号,见三方集成应用 |
同步只支持数据库、HTTP、LDAP 三种数据源,界面上没有 Excel 数据源。Excel 只用于「所有用户」页面的手工导入。
功能入口
系统 > 用户管理 > 「用户同步」 标签页。页面顶部为「同步配置」,下面是四张卡片:「用户同步」「部门同步」「角色同步」「岗位同步」。每类对象最多一份配置。
卡片上的操作:
| 操作 | 说明 |
|---|---|
| 「创建配置」 | 未配置时出现,打开配置对话框 |
| 「立即同步」 | 确认后立刻执行一次,提示「同步任务已启动」 |
| 更多菜单「预览数据」 | 查看数据源返回的原始数据 |
| 更多菜单「编辑配置」 | 修改配置 |
| 更多菜单「导出配置」 | 导出该配置。页面顶部「导出全部」导出所有配置,「导入配置」从文件导入 |
| 更多菜单「开启定时同步」/「暂停定时同步」 | 切换配置的启用状态,卡片显示「已启用」或「已停用」 |
| 更多菜单「清空已同步数据」 | 删除所有由同步产生的数据 |
| 更多菜单「删除配置」 | 删除配置本身 |
注意:「清空已同步数据」按数据来源(同步产生的记录)判断,会删除全部同步数据,操作前确认。
操作步骤
以从企业数据库同步用户为例。
新建同步配置
打开「用户同步」标签页,在「用户同步」卡片点击「创建配置」,对话框标题为「新增同步配置」,共三步:「基础设置」「数据配置」「字段映射与选项」。
在「基础设置」填写「配置名称」(最多 50 字),「同步类型」在从卡片进入时已固定,「数据源类型」选「数据库」,「同步策略」选「全量同步」,点击「下一步」。
在「数据配置」选择「数据源」(来自
数据源管理里已有的连接),填写「SQL语句」,例如:SELECT user_id, user_name, email, phone FROM sys_user WHERE status = 1点击「数据预览」确认返回了预期的行,点击「下一步」。此时系统加载源字段,加载失败会提示「未能获取到源字段,请先点击"预览数据"加载字段」。
在「字段映射与选项」把源字段映射到目标字段,至少映射目标字段中标为必填的「账号」和「姓名」。
按需设置数据处理、定时同步等选项,点击「保存配置」,提示「保存成功」。
回到卡片,点击「立即同步」,在弹窗中确认。
同步结束后在「所有用户」页面确认用户已出现。
属性/参数说明
基础设置
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 配置名称 | 配置的名称 | 必填,最多 50 字 |
| 同步类型 | 同步的对象 | 用户、部门、角色、岗位。创建后不能修改 |
| 数据源类型 | 数据来源 | 数据库、HTTP接口、LDAP |
| 同步策略 | 每次同步的范围 | 全量同步:每次同步全部数据,适合数据量小;增量同步:只同步新增和修改的数据,需要数据源支持;智能同步:自动检测变化,决定同步方式 |
| 描述 | 备注 | 可选 |
数据库数据源
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 数据源 | 选择已配置的数据源 | 必填 |
| SQL语句 | 查询人员或部门的 SQL | 必填 |
| 批量大小 | 每批次处理的数据量 | 可选 |
| 查询超时(秒) | SQL 查询超时时间 | 可选 |
| 数据预览 | 执行查询并查看结果 | - |
HTTP 数据源
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 请求地址 | 接口地址,方法可选 GET 或 POST | 必填 |
| 认证方式 | 接口的认证 | 无认证、Basic Auth(用户名、密码)、Bearer Token、API Key认证(Header名称、API Key)、签名验证(签名密钥、签名算法 HMAC-SHA256 / HMAC-SHA1 / HMAC-MD5) |
| 请求头 | 自定义请求头 | 可选 |
| 请求体 | JSON 格式的请求体 | 可选 |
| 数据路径 | 响应 JSON 中数据数组的路径 | 如 data.list |
| 启用分页 | 接口分页时设置页码参数名等 | 可选 |
| 字段路径 | 从响应里取值的字段:用户ID字段、用户名字段、真实姓名字段、邮箱字段、手机号字段、部门ID字段、角色字段、岗位字段、密码字段 | 密码字段留空则不同步密码 |
LDAP 数据源
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 服务器地址 | ldap:// 或 ldaps:// 地址 |
必填 |
| Base DN | 搜索根节点 | 必填 |
| 绑定DN / 绑定密码 | 绑定账号,绑定DN 留空为匿名访问 | 可选 |
| 用户过滤器 | 用户搜索过滤器 | 如 (&(objectClass=person)(uid=*)) |
| 部门过滤器 | 部门/组织单元搜索过滤器 | 如 (objectClass=organizationalUnit) |
| 搜索范围 | 搜索深度 | 子树搜索 (SUBTREE)、单层搜索 (ONELEVEL)、基础搜索 (BASE) |
| 用户属性 | 用户ObjectClass、用户ID属性、用户名属性、邮箱属性、手机属性、用户DN属性 | AD 常用 user、sAMAccountName;OpenLDAP 常用 inetOrgPerson、uid |
| 成员关系属性 | 用户所属组的属性,用于同步用户角色 | 如 memberOf |
| 部门属性 | 部门ObjectClass、部门ID属性、部门名称属性、父部门属性 | 父部门属性留空则按 DN 层级解析 |
| 启用角色同步 | 把 LDAP 组同步为角色,并设置角色ObjectClass、角色ID属性、角色名称属性、组成员属性 | 默认关闭 |
目标字段
字段映射的右侧是平台的目标字段,由同步类型决定:
| 同步类型 | 目标字段(必填项用「必填」标注) |
|---|---|
| 用户 | 账号(必填)、姓名(必填)、邮箱、手机号、性别、状态、工号、密码 |
| 部门 | 部门名称(必填)、部门编码、上级部门ID、状态、排序 |
| 角色 | 角色名称(必填)、描述、状态、排序 |
| 岗位 | 岗位名称(必填)、描述、状态、排序 |
同步选项
| 属性 | 说明 | 取值/默认值 |
|---|---|---|
| 创建新数据 | 创建目标中不存在的数据 | 开关 |
| 更新已有数据 | 更新目标中已存在的数据 | 开关 |
| 处理多余数据 | 目标中存在、数据源中不存在的数据 | 不处理、停用、删除 |
| 冲突处理 | 数据冲突时的处理 | 跳过、覆盖、合并 |
| 启用定时同步 | 按 Cron 计划自动执行 | 开启后在「执行计划」中设置 |
| 用户可编辑 | 同步后是否允许手动改姓名、手机、邮箱 | 开关 |
| 重复验证字段 | 判断数据是否重复的依据 | ID、名称 |
| 密码加密方式 | 同步密码字段时的存储方式 | 内置 SHA256 加密、MD5 加密、明文(不加密)、自定义加密 |
| 启用熔断 | 用户数量大幅减少时停止同步,防止误删 | 阈值 1 到 100,为数量减少的百分比 |
| 启用提醒 | 同步失败时提醒 | 提醒方式可勾选:平台消息、邮件、短信 |
管理端接口
用户同步接口只允许管理员的登录会话调用,请求头带 satoken。这些接口用于平台自己的管理页面,不属于面向第三方系统的开放接口,不接受签名认证。
| 接口 | 方法 | 说明 |
|---|---|---|
/api/user-sync/config/list |
GET | 分页查询配置 |
/api/user-sync/config/{id} |
GET | 配置详情 |
/api/user-sync/config/create |
POST | 创建配置 |
/api/user-sync/config/{id}/update |
POST | 更新配置 |
/api/user-sync/config/{id}/delete |
POST | 删除配置 |
/api/user-sync/config/{id}/enable、/disable |
POST | 启用、停用 |
/api/user-sync/config/{id}/test-connection |
POST | 测试数据源连接 |
/api/user-sync/config/{id}/preview |
GET | 预览同步结果 |
/api/user-sync/config/{id}/preview-data |
GET | 预览数据源原始数据,参数 limit 默认 100 |
/api/user-sync/config/{id}/execute |
POST | 执行同步,返回 {"logId":"..."} |
/api/user-sync/config/{id}/cancel |
POST | 取消正在执行的同步 |
/api/user-sync/config/{id}/progress、/is-running |
GET | 运行进度、是否运行中 |
/api/user-sync/running |
GET | 所有正在运行的同步任务 |
/api/user-sync/getTargetFields |
GET | 目标字段,参数 syncType |
/api/user-sync/clear-sync-data |
POST | 清除所有同步数据 |
/api/user-sync/log/list |
GET | 同步日志分页 |
/api/user-sync/log/cleanup |
POST | 清理历史日志,参数 days 默认 30 |
BASE=https://your-domain
TOKEN=<管理员登录后的 satoken>
# 执行某个同步配置
curl -s -X POST "$BASE/api/user-sync/config/<配置ID>/execute" -H "satoken: $TOKEN"
# 查看是否仍在运行
curl -s "$BASE/api/user-sync/config/<配置ID>/is-running" -H "satoken: $TOKEN"
示例
从 OpenLDAP 同步部门和人员:
- 依次为「部门同步」「用户同步」创建配置,「数据源类型」都选「LDAP」。
- 「服务器地址」填
ldap://ldap.example.com:389,「Base DN」填dc=example,dc=com,填写「绑定DN」和「绑定密码」。 - 部门配置里「部门过滤器」用
(objectClass=organizationalUnit);用户配置里「用户过滤器」用(&(objectClass=inetOrgPerson)(uid=*)),「用户ID属性」填uid。 - 分别在「数据配置」步骤点击预览数据,确认返回记录,映射字段后保存。
- 依次「立即同步」部门与用户。
- 在「身份验证」中把「同步用户的认证方式」设为「LDAP 认证」,用户即可用域密码登录,见登录集成。
预期:部门树与用户出现在 系统 > 用户管理 中,用户归属到对应部门。
注意事项
注意:初次同步前先点击「预览数据」确认数据源返回的记录、字段名正确,避免带入脏数据。
注意:把「处理多余数据」设为「删除」时,数据源里暂时查不到的记录会被删除,建议同时启用「熔断」作为保护。
提示:同步用户的登录认证由「身份验证」页面的「同步用户的认证方式」决定,与用户同步的数据源相互独立。