feat(channels): 飞书渠道协作者管理与启停 - #193
Conversation
- 新增 ChannelBindingManager 表与协作者管理 API(GET/POST/DELETE managers)
- _ensure_binding_manager 改为按操作粒度:协作者可凭证/挂载/启停,删除与管理协作者仅创建者+admin
- list_channel_bindings 放开协作者可见性并返回 my_role
- 新增 POST /{binding_id}/toggle-status 启停渠道端点
- 前端:角色徽标、断开接入按角色显隐、启停按钮、协作者管理面板
|
[P1] OIDC 登录入口忽略 VITE_API_BASE_URL,分离部署时无法发起登录 |
|
感谢 @fadeoreo 的反馈。经核实,当前仓库(
评论引用的路径 这一点确实会在分离部署时让 SSO 跳到前端 origin。待 OIDC SSO 功能正式合入仓库后,会按此建议落地:前端 SSO 入口统一用 如需要,我可以在单独的 PR 中直接新增 OIDC SSO 入口实现并按上述原则处理 base URL 与 landing URL。 |
意图
解决飞书渠道绑定「仅创建者一人能管理」的限制:允许创建者显式添加协作者,协作者可配置/轮换凭证、管理挂载员工、启停渠道,但不能删除渠道或管理其他协作者。
改动
后端
ChannelBindingManager表(软撤销revoked_at+ 审计字段;create_all自动建表,无需迁移)_ensure_binding_manager改为按action粒度校验(manage_credentials/manage_agents/toggle_status放行协作者)list_channel_bindings放开协作者可见性,并在ChannelBindingRead上返回my_role(admin/owner/collaborator)GET/POST/DELETE /{binding_id}/managers协作者管理端点(加/移/列;移除走软撤销,重新添加复活该行)POST /{binding_id}/toggle-status启停渠道端点(停用 quiesce 长连接,启用按需 resume,复用凭证保存/删除同款生命周期管理)前端
my_role显隐(仅 owner/admin)BindingManagers.tsx组件(复用tenantUsers做成员选择,排除创建者/管理员/已有协作者)channelPresentation.ts(canDeleteBinding/canManageBinding/ROLE_LABEL)权限边界
风险
status=disabled,启用status=active+ 有凭证时 resume,与既有删除/凭证保存同款 quiesce/resume 范式。ChannelBindingRead注释明确「绝不回传凭证明文」,app_secret不在读取视图;协作者只能重填/轮换,无法查看明文。revoked_at)保留 who/when 审计;同一 (binding, user) 仅一行,重新添加复活而非新增。viewaction。测试
test_channel_managers.py(11 个用例:协作者能配凭证/管挂载/启停、不能删除/不能管协作者、非协作者 403、列表可见性与 my_role、软撤销后失去权限再添加恢复、添加校验 400/409、admin 可管协作者);既有 channel 套件 455 passed,零破坏。tsc+vite build通过;vitest 186 passed(新增 11 个channelPresentation权限函数用例)。config:check通过;i18n:checkexit 1 为既有状态(改动前即失败),跟随既有中文硬编码风格。UI 验证
/enterprise/channels→ 飞书渠道详情