bug: Project members with apiKeys:read cannot view API keys page

该报错通常出现在 Langfuse 自托管环境中,当项目角色为 MEMBER 的用户打开“项目设置 → API Keys”页面时触发。优先排查前端组件 ApiKeyList.tsx 是否错误地使用了 apiKeys:CUD 权限来判断页面可见性,导致具备 apiKeys:read 权限的成员无法查看

快速结论:该报错通常出现在 Langfuse 自托管环境中,当项目角色为 MEMBER 的用户打开“项目设置 → API Keys”页面时触发。优先排查前端组件 ApiKeyList.tsx 是否错误地使用了 apiKeys:CUD 权限来判断页面可见性,导致具备 apiKeys:read 权限的成员无法查看列表。

适用环境:Langfuse 自托管版本 v3.172.1(可能影响 v4.13.0 及 main 分支),涉及 RBAC 权限组件 projectAccessRights.ts、API 路由 projectApiKeyRouter.ts 及前端组件 ApiKeyList.tsx

最快修复方案:暂无确认的一步修复方案。可优先尝试将 ApiKeyList.tsx 中的页面守卫和查询 enabled 标志改为基于 apiKeys:read 权限判断,同时保留 apiKeys:CUD 用于创建/删除/备注编辑等写操作。

注意事项:上述修复方案仅为 Issue 讨论中的建议,尚未被官方合并验证。建议在测试环境先行验证,并留意后续官方补丁或 PR。

问题场景

在 Langfuse 自托管环境中,管理员将用户添加到项目并分配 MEMBER 角色(组织角色为 MEMBER 或 NONE)。该用户登录后打开“项目设置 → API Keys”页面时,页面显示“Access Denied”错误,且列表查询请求从未发出;但如果直接调用 projectApiKeys.byProjectId API,则该用户可以成功获取密钥列表。拥有 ADMIN/OWNER 角色(或通过组织角色回退到这些角色)的用户不受影响。

报错原文

bug: Project members with apiKeys:read cannot view API keys page
Access Denied - You do not have permission to view API keys for this project

原因分析

根据 Issue 讨论,问题可能出在前端组件 ApiKeyList.tsx 的权限判断逻辑上:该组件使用单一的 hasProjectAccess 变量,作用域为 apiKeys:CUD,同时用于控制页面渲染和查询的 enabled 标志。由于 MEMBER 角色仅拥有 apiKeys:read,因此被错误地拦截。后端 API projectApiKeys.byProjectId 只需要 apiKeys:read,说明后端逻辑是正确的,问题仅存在于前端。

环境排查

  • 确认 Langfuse 版本是否为 v3.172.1、v4.13.0 或 main 分支。
  • 确认项目角色是否确实为 MEMBER,组织角色为 MEMBER 或 NONE。
  • 检查 projectAccessRights.ts 中 MEMBER 角色是否包含 apiKeys:read(v4.13.0 中第 210 行)。
  • 检查 ApiKeyList.tsx 中使用的权限作用域(第 48-51 行)。
  • 确认直接调用 projectApiKeys.byProjectId API 是否成功(用于排除后端问题)。

解决步骤

  1. 登录 Langfuse 管理后台,将测试用户所在项目的角色从 MEMBER 临时调整为 ADMIN 或 OWNER,确认 API Keys 页面可正常显示,以验证问题与 MEMBER 角色相关。
  2. 在测试环境中修改 ApiKeyList.tsx,将页面守卫和查询 enabled 标志的权限判断从 apiKeys:CUD 改为 apiKeys:read
  3. 保留创建、删除、备注编辑等操作按钮的权限判断为 apiKeys:CUDDeleteApiKeyButtonApiKeyNote 组件已有独立判断,无需修改)。
  4. 提交代码更改后,重新构建前端资源并重启 Langfuse 服务。
  5. 使用 MEMBER 角色用户重新登录,打开“项目设置 → API Keys”页面验证是否可正常查看密钥列表。

验证方法

以 MEMBER 角色用户登录后,打开项目设置中的 API Keys 页面,确认不再出现“Access Denied”提示,且密钥列表能够正常加载显示。同时确认创建、删除密钥等操作按钮仍然不可用(或根据实际权限正确显示),确保写操作权限未被意外放开。

参考来源

langfuse/langfuse #16285

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19230

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注