trainer通过管理端跳转虚拟课堂直播角色功能失效问题

trainer 虚拟课堂角色跳转失效问题的排查记录。

#status / growing #type / debug #tech / dev / frontend

trainer 通过管理端跳转虚拟课堂直播角色功能失效问题

现象

trainer(讲师)通过管理端跳转进入虚拟课堂直播时,角色应为 MODERATOR(主持人),但实际以 VIEWER(观众)身份进入,无法使用主持功能(如静音、踢人、屏幕共享)。

原因

后端 join API 存在一个封装好的接口,用于区分 MODERATOR 和 VIEWER 角色,但调用时需要传入指定参数(如 role=MODERATORtrainerId)。academy 前端在跳转时没有传递该参数,导致后端默认返回 VIEWER 角色。

排查

1. 确认接口文档

POST /api/v1/classroom/join
{
  "classroomId": "xxx",
  "userId": "xxx",
  "role": "MODERATOR" | "VIEWER"   // 缺少此字段
}

2. 检查前端调用代码

在 academy 前端项目中找到跳转入口:

// 问题代码:缺少 role 参数
const joinClassroom = async (classroomId: string) => {
  const res = await api.post('/classroom/join', {
    classroomId,
    userId: currentUser.id,
    // 缺少 role 字段,后端默认为 VIEWER
  });
  window.location.href = res.data.liveUrl;
};

3. 确认角色判断逻辑

// 检查用户身份是否为 trainer
const isTrainer = currentUser.roles.includes('trainer');

解决

// 修复:根据用户身份传入正确的角色参数
const joinClassroom = async (classroomId: string) => {
  const isTrainer = currentUser.roles.includes('trainer');
  const res = await api.post('/classroom/join', {
    classroomId,
    userId: currentUser.id,
    role: isTrainer ? 'MODERATOR' : 'VIEWER',  // 关键修复
  });
  window.location.href = res.data.liveUrl;
};

同时需要后端确认:

  • 接口已支持 role 参数的接收和处理
  • 权限校验:非 trainer 身份不允许传入 MODERATOR

验证

  1. 以 trainer 身份从管理端跳转进入虚拟课堂,确认角色显示为 MODERATOR
  2. 以普通学员身份跳转,确认角色为 VIEWER
  3. 检查网络请求中 role 参数正确传递
创建于 2025/12/15 更新于 2026/5/27