Story 006.001: 实现管理员权限自动提升功能
父史诗: 史诗006 - 直播课堂管理员权限自动优化
docs/prd/epic-006-live-classroom-admin-optimization.md
Status
Ready For Develop - 需要修正实现细节
Story
As a 直播课堂老师用户
I want 在加入非自己创建的课堂时自动获得管理员权限
so that 我能够无缝管理任何课堂而无需手动权限提升
Acceptance Criteria
- 管理员权限自动提升功能 - 在joinClass方法中添加群组创建者和管理员列表检查逻辑
- 权限状态判断 - 实现权限状态判断,识别需要权限提升的场景
- 权限提升方法 - 创建权限提升方法,处理群创建者登录和modifyGroup调用
- 错误处理和降级机制 - 添加错误处理和降级机制,确保功能健壮性
- 用户体验优化 - 优化用户体验,提供友好的提示信息
Tasks / Subtasks
Dev Notes
技术栈信息
- 前端框架: React 19.1.0 + TypeScript [Source: architecture/tech-stack.md#L14-L15]
- 实时通信: 阿里云RTC SDK + IM SDK [Source: architecture/tech-stack.md#L22-L23]
- 状态管理: @tanstack/react-query + Context [Source: architecture/component-architecture.md#L119]
现有组件架构
- 组件位置:
src/client/mobile/components/Classroom/useClassroom.ts [Source: architecture/component-architecture.md#L66-L72]
- 相关组件: ClassroomLayout, ClassroomProvider, TeacherClassControlButton [Source: architecture/component-architecture.md#L66-L69]
- Hook结构: useClassroom.ts包含joinClass方法(666-820行) [Source: architecture/component-architecture.md#L72]
阿里云IM SDK集成
- 群组管理: AliVCIMGroupManager类提供queryGroup和modifyGroup方法 [Source: alivc-im.iife.d.ts#L32-L118]
- 群组信息: ImGroupInfo接口包含creator和admins字段 [Source: alivc-im.iife.d.ts#L756-L797]
- 权限修改: ImModifyGroupReq接口支持admins字段更新 [Source: alivc-im.iife.d.ts#L1241-L1264]
- 关键API调用: modifyGroup需要forceUpdateAdmins=true来强制更新管理员列表 [Source: alivc-im.iife.d.ts#L1241-L1264]
现有joinClass方法分析
- 当前逻辑: 在666-820行实现完整的课堂加入流程 [Source: useClassroom.ts#L666-L820]
- 权限检查位置: 在获取群组信息后(682行)添加权限提升逻辑 [Source: useClassroom.ts#L682]
- 关键变量: groupInfo包含creator和admins信息 [Source: useClassroom.ts#L679-L682]
权限提升具体实现细节
- 权限检查逻辑: 在获取groupInfo后,检查当前用户是否为creator或已在admins列表中
- 权限提升条件: 仅对Teacher角色且非creator/非admin的用户进行权限提升
- 群创建者登录逻辑: 非creator/非admin用户需要先以creator身份登录才能调用modifyGroup API
- 权限提升API调用: 使用forceUpdateAdmins=true,将当前用户添加到admins列表
- 降级机制: 权限提升失败时不影响正常课堂加入流程,仅记录错误日志
- 当前实现问题: autoPromoteToAdmin方法中直接调用modifyGroup会失败,需要先以creator身份登录
项目结构约束
- 文件组织: 遵循移动端组件架构模式 [Source: architecture/source-tree.md#L36-L46]
- 测试位置: 单元测试位于
__tests__目录 [Source: architecture/source-tree.md#L141-L142]
- 导入模式: 使用ES模块和现有别名系统 [Source: architecture/source-tree.md#L143]
Testing
测试标准和框架
- 测试框架: Vitest + Testing Library [Source: architecture/coding-standards.md#L27-L30]
- 测试位置:
__tests__文件夹与源码并列 [Source: architecture/coding-standards.md#L28]
- 测试文件:
src/client/mobile/components/Classroom/__tests__/useClassroom.test.ts(需要创建测试目录和文件)
- 测试类型: 单元测试,覆盖权限检查、提升逻辑、错误处理
- 覆盖率目标: 核心业务逻辑 > 80% [Source: architecture/coding-standards.md#L29]
测试要求
- 测试权限检查逻辑的正确性:验证isCreator和isAdmin判断逻辑
- 验证权限提升成功场景:模拟modifyGroup成功调用
- 验证权限提升失败场景:模拟modifyGroup异常抛出
- 确保降级机制不影响正常功能:验证权限提升失败后课堂仍能正常加入
- 测试用户提示信息的显示逻辑:验证toast提示的正确触发
Change Log
| Date |
Version |
Description |
Author |
| 2025-09-28 |
1.0 |
初始故事创建 |
Bob (Scrum Master) |
| 2025-09-28 |
1.1 |
完善权限提升实现细节和错误处理模式 |
Bob (Scrum Master) |
| 2025-09-28 |
1.2 |
修正实现细节:非creator用户需要先以creator登录才能调用modifyGroup |
Bob (Scrum Master) |
Dev Agent Record
此部分由开发代理在实施期间填充
Agent Model Used
Debug Log References
Completion Notes List
File List
QA Results
此部分由QA代理在完成故事实施后填充