Agent app detail returns empty permission_keys when agent.id is UUID

这个报错通常出现在 Dify 自托管环境中已禁用 RBAC(改用 legacy roles)、且被访问的 Agent 应用底层是 roster agent 时,Agent app detail API 返回的 permission_keys 始终为空。优先排查 detail 序列化时是否用原始 UU

快速结论:这个报错通常出现在 Dify 自托管环境中已禁用 RBAC(改用 legacy roles)、且被访问的 Agent 应用底层是 roster agent 时,Agent app detail API 返回的 permission_keys 始终为空。优先排查 detail 序列化时是否用原始 UUID 去查找权限映射。

适用环境:Dify(main 分支),自托管 Docker 部署。Issue 未提供操作系统、Python、CUDA、显卡或具体依赖版本,无法确认这些细节。

最快修复方案:暂无确认的一步修复方案。仓库已存在针对 _serialize_agent_app_detail 的修复 PR(#42151),但在 Issue 讨论时尚未合并,需等待合并或手动应用同类改动。

注意事项:#42095 只修复了列表序列化器,detail 序列化器被漏掉;在官方修复合并前,任何手动改动都属于未验证操作,可能与后续版本产生差异。

问题场景

在 Dify 自托管环境中禁用 RBAC(legacy roles)后,请求由 roster agent 支撑的 Agent 应用详情接口,响应中的 permission_keys 字段始终为空。对照第 42095 号修复后的 agents 列表接口,预期详情接口也应返回角色对应的 agent keys,但实际不是。

报错原文

Agent app detail returns empty permission_keys when agent.id is UUID

相关代码路径:_serialize_agent_app_detail 中调用

permissions.agent.permission_keys_by_resource_ids([agent.id]).get(agent.id, [])

原因分析

最可能的原因是类型不匹配:permission_keys_by_resource_ids 返回的字典以 str(resource_id) 为键,而 detail 序列化器却直接用 UUID 类型的 agent.id.get(),导致永远匹配不到,只能回落到默认空列表 []。列表序列化器在第 42095 号 PR 中已改为 permission_keys_by_agent_id.get(str(agent.id), []),detail 序列化器被遗漏了。

环境排查

  • 确认 Dify 版本或分支:Issue 基于 main 分支。
  • 确认部署方式:Self Hosted (Docker)。
  • 确认是否已禁用 RBAC、切换为 legacy roles。
  • 确认触发接口的应用是否由 roster agent 支撑。
  • 确认是否已包含第 42095 号 PR 对列表序列化器的修复。
  • Issue 未提供 Python、CUDA、PyTorch、显卡或节点依赖版本,无需臆测。

解决步骤

  1. 先复现并定位:在禁用 RBAC 的环境下,请求 roster agent 支撑的 Agent 应用详情 API,确认 permission_keys 为空。
  2. 对照代码:检查 api/controllers/console/agent/roster.py_serialize_agent_app_detail 的权限查询逻辑,确认是否仍在使用原始 agent.id 查找。
  3. 参照列表序列化器的修复方式(第 42095 号 PR),将 detail 序列化器的查找键改为 str(agent.id),即 .get(str(agent.id), [])。该改动已在 PR #42151 中提出,但 Issue 讨论时尚未合并。
  4. 如果不想自行改动,关注 PR #42151 的合并进度,合并后升级到包含该修复的版本。

验证方法

重新请求 Agent 应用详情接口,检查响应中的 permission_keys 是否返回角色对应的 agent keys,并与 agents 列表接口(第 42095 号修复后)的结果保持一致。若仍为空,说明修复未生效或环境未更新到对应版本。

参考来源

langgenius/dify #42150

关联修复:langgenius/dify PR #42151(Issue 讨论时未合并);此前同类修复:langgenius/dify PR #42095

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 22808

发表回复

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