Files
Telegram-Panel/docs/developer/group-admin-removal.md
jack b536c73e54 release: 发布 v1.31.75 Issues 修复
合并 dev 集成结果到 main,发布 v1.31.75。云端 dev-latest 部署按用户指示跳过,主分支多架构 Docker 检查当时仍在运行。
2026-08-24 08:18:29 +08:00

39 lines
2.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 群组管理员移除合同
适用版本:当前开发版。
群组详情页的“踢出管理员”不是通用按用户名踢人接口的别名。它必须通过
`POST /api/panel/groups/{id}/admins/{userId}/kick` 调用专用服务,并且只对群组生效。
前端只传本地群组记录 ID 和 Telegram 用户 ID不得把 Telegram `access_hash`、用户名或
永久封禁选项暴露为该行内操作的合同。
服务端必须先由 `GroupManagementService` 选择执行账号,再由 `IGroupService` 实时读取
管理员列表和目标用户的 `access_hash`。在任何写入前必须拒绝:
- 目标是创建者;
- 目标已经不是管理员;
- 目标就是执行账号本人;
- 无法取得目标的 `access_hash`
- 执行账号不是管理员,或在超级群中缺少“添加管理员”和“封禁用户”权限。
对基础群组按 `撤销管理员 -> 删除成员` 执行;对超级群按
`Channels_EditAdmin(空权限) -> Channels_EditBanned(60 秒)` 执行。两步都必须使用已有的
Telegram 请求超时控制,禁止因第一次请求超时而自动重放整个流程。
两步操作不是 Telegram 原子事务。若降权成功、踢出失败,
`GroupAdminRemovalResult` 必须保留 `AdminRightsRemoved=true`,端点返回 `409` 和明确中文提示;
前端无论响应成功还是冲突都刷新管理员列表,不能把该状态显示为普通全失败后立即重试。
该操作不改变数据库结构,但会同步目标属于本系统账号时的已有群组关联:踢出成功或目标已不在群组时
删除对应关联;仅降权成功时保留成员关联,并将 `IsCreator``IsAdmin` 都更新为 `false`。同步仅更新已
匹配 Telegram 用户 ID 的关联,不会为外部管理员创建账号或关联记录。
验收前提是使用非生产测试群,至少覆盖:创建者没有操作按钮且服务端拒绝、无用户名管理员可被
成功移除、缺少权限的执行账号被拒绝、成功后管理员列表消失,以及降权后踢出失败时的部分成功
提示。失败排查先看管理员实时状态和执行账号权限,再检查 Telegram 限流、Session 和代理;不要
退回到通用 `batch/kick` 接口绕过 `access_hash` 与创建者保护。
该功能没有数据库迁移。回滚只会撤回专用端点和界面按钮,无法自动恢复 Telegram 侧已经完成的
降权或踢出,也不会自动还原已同步的本系统账号群组关联;操作前后的管理员列表和 Telegram 审计结果
应作为人工回滚依据。