客户关怀
支持和故障排除的用户模拟
模拟允许授权员工临时以其他用户的身份登录,以便排除故障、验证配置或准确查看用户的体验。此功能对于客户支持至关重要,但需要适当的权限,并且会进行全面审计。
在模拟客户时,员工可以访问 自助服务门户 ,正如客户所看到的那样,从而实现准确的故障排除和支持。
另请参见:RBAC 以获取权限配置,客户 以获取客户管理,自助服务门户 以获取客户门户功能。
目的
用户模拟提供:
- 故障排除 --- 精确查看客户所见以诊断问题
- 验证 --- 确认服务配置和权限正常工作
- 培训 --- 从客户的角度演示功能
- 支持 --- 帮助客户在不需要共享屏幕的情况下导航系统
- 审计跟踪 --- 所有模拟会话都被记录以确保安全和合规
所需权限
要模拟用户,您必须拥有以下权限之一:
can_impersonate--- 专为支持人员设定的模拟权限admin--- 完全管理访问权限(包括模拟权利)
没有这些权限的用户无法访问模拟功能。
如何模拟用户
通过 Web UI:
- 导航到客户 --- 在 CRM 中找到客户
- 选择联系人 --- 查看客户的联系人列表
- 点击“以用户身份登录” --- 每个拥有用户账户的联系人旁边会出现按钮
- 确认模拟 --- 系统可能会提示确认
- 会话开始 --- 您现在以该用户身份登录

通过 API:
开始模拟会话:
端点: POST /auth/impersonate
所需权限: can_impersonate 或 admin
请求:
{
"user_id": 42
}
响应:
{
"success": true,
"impersonating_user_id": 1,
"target_user_id": 42,
"impersonation_start": "2025-01-04T15:30:00Z",
"access_token": "new_token_for_impersonated_user",
"refresh_token": "new_refresh_token"
}
返回的令牌用于模拟用户的会话。
模拟期间发生的事情
当您模拟用户时:
- 完整上下文 --- 您看到的系统与目标用户所见完全相同:
- 他们的仪表板和导航
- 他们的客���数据(如果是客户用户)
- 他们的权限和访问控制
- 他们的服务、发票和使用情况
- 会话跟踪 --- 系统跟踪两个身份:
impersonating_user_id--- 您的真实用户 IDtarget_user_id--- 您正在模拟的用户impersonation_start--- 模拟开始的时间
- 指示器 --- UI 显示一个横幅,表明您正在模拟某人:
- “您当前以 [用户名] 登录”
- “点击此处停止模拟”
- 审计日志 --- 所有操作都记录了两个用户 ID:
- 操作显示为目标用户执行
- 审计日志记录了实际执行操作的用户(模拟用户)
- 在
ImpersonationLog表中维护完整的审计跟踪
停止模拟
通过 Web UI:
- 点击横幅 --- 点击页面顶部的模拟横幅
- 或导航 --- 转到用户菜单并选择“停止模拟”
- 确认 --- 会话结束,您返回到自己的账户
通过 API:
端点: POST /auth/stop_impersonation
请求: 无需请求体(经过身份验证的请求)
响应:
{
"success": true,
"impersonation_end": "2025-01-04T15:45:00Z",
"duration_seconds": 900,
"access_token": "your_original_token",
"refresh_token": "your_original_refresh_token"
}
您的原始会话被恢复。
模拟审计日志
所有模拟会话都记录在 ImpersonationLog 表中,包含:
- impersonating_user_id --- 执行模拟的员工
- target_user_id --- 被模拟的客户或用户
- impersonation_start --- 开始时间戳
- impersonation_end --- 结束时间戳(会话停止时)
- impersonation_duration --- 持续时间(以秒为单位)
这为所有模拟会话提供了完整的责任追踪,并允许:
- 安全审计 --- 审查谁在何时模拟了谁
- 合规报告 --- 演示提升访问权限的正确使用
- 调查 --- 跟踪模拟会话期间的操作
- 监控 --- 识别不寻常的模拟模式
查看模拟日志:
管理员可以通过 API 查询模拟日志:
GET /auth/impersonation_logs?user_id={user_id}&start_date={date}&end_date={date}
按以下条件过滤:
- 模拟用户(执行模拟的人)
- 目标用户(被模拟的人)
- 日期范围
- 持续时间
最佳实践
- 最小化持续时间 --- 仅在解决问题所需的时间内进行模拟
- 记录目的 --- 在客户活动日志中注明为什么需要模拟
- 告知客户 --- 让客户知道您可能需要查看他们的账户(隐私政策)
- 验证身份 --- 在通过他们的账户进行模拟之前确认用户身份
- 审查日志 --- 定期审计模拟日志以查找不寻常的模式
- 限制权限 --- 仅向需要的支持人员授予
can_impersonate权限 - 培训 --- 确保员工理解责任和审计影响
安全考虑
- 完全访问 --- 模拟授予对目标用户账户的完全访问权限
- 无需密码 --- 模拟绕过身份验证(仅基于权限)
- 记录的操作 --- 模拟期间的所有操作都归因于应用程序日志中的目标用户(但审计日志显示真实的执行者)
- 会话隔离 --- 模拟创建一个新会话;不会影响目标用户的活动会话
- 时间限制 --- 模拟会话应有限制时间(可配置)
- MFA 绕过 --- 模拟绕过 2FA 要求(使用模拟者的身份验证)
限制
- 无法模拟管理员 --- 根据配置,可能无法模拟其他管理员
- 相同权限 --- 您获得目标用户的权限,而不是两个用户权限的并集
- 会话限制 --- 每个员工一次只能有一个模拟会话
- 审计要求 --- 无法禁用或隐藏模拟日志
故障排除常见问题
问题:“以用户身份登录”按钮未出现
- 解决方案:验证您是否拥有
can_impersonate或admin权限 - 解决方案:确认联系人是否有关联的用户账户
问题:模拟失败并出现权限错误
- 解决方案:检查目标用户是否为管理员(可能受到限制)
- 解决方案:验证您的模拟权限是否有效
问题:无法停止模拟
- 解决方案:使用 API 端点停止模拟:
POST /auth/stop_impersonation - 解决方案:清除浏览器 cookies 并使用您的凭据重新登录
问题:操作未正确记录
- 解决方案:验证模拟会话是否处于活动状态(检查横幅)
- 解决方案:审查审计日志 - 操作记录了两个用户 ID