Skip to content

[Bug] MemoryPanel Team 删除入口难发现,system_admin 无法查看或删除其他用户的 Team #1237

Description

@psiQAQ

OpenClaw Version | OpenClaw 版本

Not applicable. This issue is in MemoryPanel.

Plugin Version | 插件版本

TencentDB-Agent-Memory / MemoryPanel 0.1.0, current feat/server_team implementation.

Operating System | 操作系统

Linux 7.0.0-30-generic x86_64 (container deployment).

System Specification | 系统配置

Not relevant to reproduction.

Describe the bug | 问题描述

MemoryPanel 的 Team 删除流程存在两个相关问题:

  1. 对 Team owner / Team admin,删除入口只出现在 TeamSwitcher 的当前 active Team 行中,并且默认隐藏,只有 hover / focus 时才显示。成员管理页等常见的 Team 管理位置没有清晰、常驻的删除入口,用户很容易认为系统不支持删除 Team。
  2. 全局 system_admin 无法在 MemoryPanel 中查看或删除其他用户创建的 Team。前端虽然将 userRole === 'admin' 视为可以编辑或删除当前 Team,但 Team 列表仍按当前管理员的 user_id 调用 team/list,因此只会返回该管理员作为 active member 加入的 Team。未加入普通 Team 的 system_admin 看不到实例中的其他 Team,也无法到达删除入口。

后端授权也与前端表达不一致:deleteTeamsForCaller() 仅允许 Team owner 或 meta_team_members.role === 'admin' 删除 Team,没有考虑 ctx.isSystemAdmin。因此,即使 system_admin 已知目标 team_id,直接调用删除接口仍会返回 403。

To Reproduce | 复现步骤

Team owner:

  1. 使用普通用户创建一个 Team。
  2. 登录 MemoryPanel,进入成员管理页或其他 Team 管理相关页面。
  3. 页面中没有清晰、常驻的“删除 Team”入口。
  4. 打开顶栏 TeamSwitcher
  5. 如果目标 Team 不是 active Team,需要先选择该 Team,再次打开 TeamSwitcher
  6. hover active Team 行后,右侧才显示编辑和删除图标。

system_admin

  1. 创建一个 system_admin,但不将其加入普通 Team。
  2. 使用普通用户创建一个或多个 Team。
  3. 使用 system_admin 登录 MemoryPanel。
  4. TeamSwitcher 不显示这些 Team,因此无法选择或删除它们。
  5. 即使已知 team_id,以 system_admin 调用 Team 删除接口仍会因不是 owner 或 Team member admin 而返回 403。

Expected behavior | 预期行为

  1. Team 删除操作应位于用户自然预期的 Team 管理位置;如果保留在 TeamSwitcher 中,也应提供清晰、易发现的常驻菜单或操作入口,而不是仅依赖 hover 且只对 active Team 显示。
  2. 明确定义 system_admin 的 Team 管理权限,并保证前后端一致:
    • 如果 system_admin 应管理实例内全部 Team,应提供实例级 Team 列表能力,并在 Core 的 Team 管理授权中显式支持 ctx.isSystemAdmin
    • 如果 system_admin 不应管理未加入的 Team,应从 TeamSwitcher 的 active Team 管理判断中移除 userRole === 'admin' 这一特殊分支,并在 UI 或文档中明确该限制。
  3. 删除操作应保留明确的二次确认和级联影响说明。

Error Logs / Screenshots | 报错日志/截图

没有运行时错误日志。问题表现为入口不可见;已知 team_id 时,非 owner / Team member admin 的删除请求返回 403。

Additional context | 补充信息

  • MemoryPanel/web/src/layouts/GlobalHeader/TeamSwitcher.tsx:只对 active Team 渲染操作按钮;对于已经出现在列表中的 active Team,userRole === 'admin' 会直接使 canManageActiveTeam 成立,无需当前用户是该 Team 的 owner 或 member admin。
  • MemoryPanel/web/src/layouts/GlobalHeader/team-switcher.css:操作区默认透明,仅在 hover / focus 时显示。
  • MemoryPanel/web/src/lib/api/teams.ts:Team 列表仍按当前用户的 user_id 请求。
  • MemoryCore/src/metadata/service/metadata-service.ts:Team 删除仅允许 owner 或 Team member admin,未检查 ctx.isSystemAdmin

该问题存在于上游仓库当前实现中。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions