跳到主要内容

客户关怀

支持和故障排除的用户模拟

模拟允许授权员工临时以其他用户的身份登录,以便排除故障、验证配置或准确查看用户的体验。此功能对于客户支持至关重要,但需要适当的权限,并且会进行全面审计。

在模拟客户时,员工可以访问 自助服务门户 ,正如客户所看到的那样,从而实现准确的故障排除和支持。

另请参见:RBAC 以获取权限配置,客户 以获取客户管理,自助服务门户 以获取客户门户功能。

目的

用户模拟提供:

  1. 故障排除 --- 精确查看客户所见以诊断问题
  2. 验证 --- 确认服务配置和权限正常工作
  3. 培训 --- 从客户的角度演示功能
  4. 支持 --- 帮助客户在不需要共享屏幕的情况下导航系统
  5. 审计跟踪 --- 所有模拟会话都被记录以确保安全和合规

所需权限

要模拟用户,您必须拥有以下权限之一:

  • can_impersonate --- 专为支持人员设定的模拟权限
  • admin --- 完全管理访问权限(包括模拟权利)

没有这些权限的用户无法访问模拟功能。

如何模拟用户

通过 Web UI:

  1. 导航到客户 --- 在 CRM 中找到客户
  2. 选择联系人 --- 查看客户的联系人列表
  3. 点击“以用户身份登录” --- 每个拥有用户账户的联系人旁边会出现按钮
  4. 确认模拟 --- 系统可能会提示确认
  5. 会话开始 --- 您现在以该用户身份登录

以用户身份登录 OmniCRM

通过 API:

开始模拟会话:

端点: POST /auth/impersonate

所需权限: can_impersonateadmin

请求:

{
"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 --- 您的真实用户 ID
    • target_user_id --- 您正在模拟的用户
    • impersonation_start --- 模拟开始的时间
  • 指示器 --- UI 显示一个横幅,表明您正在模拟某人:
    • “您当前以 [用户名] 登录”
    • “点击此处停止模拟”
  • 审计日志 --- 所有操作都记录了两个用户 ID:
    • 操作显示为目标用户执行
    • 审计日志记录了实际执行操作的用户(模拟用户)
    • ImpersonationLog 表中维护完整的审计跟踪

停止模拟

通过 Web UI:

  1. 点击横幅 --- 点击页面顶部的模拟横幅
  2. 或导航 --- 转到用户菜单并选择“停止模拟”
  3. 确认 --- 会话结束,您返回到自己的账户

通过 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}

按以下条件过滤:

  • 模拟用户(执行模拟的人)
  • 目标用户(被模拟的人)
  • 日期范围
  • 持续时间

最佳实践

  1. 最小化持续时间 --- 仅在解决问题所需的时间内进行模拟
  2. 记录目的 --- 在客户活动日志中注明为什么需要模拟
  3. 告知客户 --- 让客户知道您可能需要查看他们的账户(隐私政策)
  4. 验证身份 --- 在通过他们的账户进行模拟之前确认用户身份
  5. 审查日志 --- 定期审计模拟日志以查找不寻常的模式
  6. 限制权限 --- 仅向需要的支持人员授予 can_impersonate 权限
  7. 培训 --- 确保员工理解责任和审计影响

安全考虑

  • 完全访问 --- 模拟授予对目标用户账户的完全访问权限
  • 无需密码 --- 模拟绕过身份验证(仅基于权限)
  • 记录的操作 --- 模拟期间的所有操作都归因于应用程序日志中的目标用户(但审计日志显示真实的执行者)
  • 会话隔离 --- 模拟创建一个新会话;不会影响目标用户的活动会话
  • 时间限制 --- 模拟会话应有限制时间(可配置)
  • MFA 绕过 --- 模拟绕过 2FA 要求(使用模拟者的身份验证)

限制

  • 无法模拟管理员 --- 根据配置,可能无法模拟其他管理员
  • 相同权限 --- 您获得目标用户的权限,而不是两个用户权限的并集
  • 会话限制 --- 每个员工一次只能有一个模拟会话
  • 审计要求 --- 无法禁用或隐藏模拟日志

故障排除常见问题

问题:“以用户身份登录”按钮未出现

  • 解决方案:验证您是否拥有 can_impersonateadmin 权限
  • 解决方案:确认联系人是否有关联的用户账户

问题:模拟失败并出现权限错误

  • 解决方案:检查目标用户是否为管理员(可能受到限制)
  • 解决方案:验证您的模拟权限是否有效

问题:无法停止模拟

  • 解决方案:使用 API 端点停止模拟: POST /auth/stop_impersonation
  • 解决方案:清除浏览器 cookies 并使用您的凭据重新登录

问题:操作未正确记录

  • 解决方案:验证模拟会话是否处于活动状态(检查横幅)
  • 解决方案:审查审计日志 - 操作记录了两个用户 ID