快速结论:该报错是 Dify 1.17.0 中 Agent Composer 接口的 RBAC 权限校验缺失问题,当工作区已启用 RBAC 时,普通成员无需 AGENT_MANAGE 权限即可读取完整的 Agent 应用配置。优先排查 api/controllers/console/agent/composer.py 中 AgentComposerApi.get 方法是否已添加 @rbac_permission_required(RBACResourceScope.WORKSPACE, RBACPermission.AGENT_MANAGE, resource_required=False) 装饰器。
适用环境:Dify 1.17.0(main 分支,Docker 自托管版本),代码位于 api/controllers/console/agent/composer.py。
最快修复方案:暂无确认的一步修复方案。该 Issue 已关闭但未提供已验证的补丁代码,建议将 AgentComposerApi.get 方法(约 517 行)添加与 put 方法(约 530 行)相同的 RBAC 权限装饰器,或等待官方在后续版本中修复。
注意事项:该问题不仅影响 AgentComposerApi.get,同文件中的多个只读接口(如 AgentComposerValidateApi.post、AgentComposerCandidatesApi.get、WorkflowAgentComposerApi.get 等)也存在类似权限校验缺失,建议在修复时一并检查。
问题场景
在启用了 RBAC(基于角色的访问控制)的 Dify 工作区中,使用普通工作区成员账号(不具备 AGENT_MANAGE 权限)调用 GET /console/api/agent/<agent_id>/composer 接口时,请求成功返回了完整的 Agent 应用构建器配置状态,包括系统提示词、工具、Agent 灵魂、模型等敏感配置信息。而对应的 PUT 方法(写入操作)则会正确返回 403 Forbidden,因为它在代码中强制使用了 @rbac_permission_required(RBACResourceScope.WORKSPACE, RBACPermission.AGENT_MANAGE, resource_required=False) 装饰器。
报错原文
security(api): GET /agent/{agent_id}/composer missing RBAC permission decorator
原因分析
可能原因:在 api/controllers/console/agent/composer.py 中,AgentComposerApi.get 方法(约 517 行)只使用了 @setup_required、@login_required、@account_initialization_required、@with_current_tenant_id 和 @with_session 装饰器,遗漏了与其兄弟方法 AgentComposerApi.put(约 530 行)一致的 RBAC 权限装饰器。这导致只读接口未执行工作区级别的 RBAC 授权检查。
需要说明的是,该问题并不局限于 AgentComposerApi.get 一个接口。同文件中多个只读接口(如 AgentComposerValidateApi.post、AgentComposerCandidatesApi.get、WorkflowAgentComposerApi.get、SnippetAgentComposerApi.get 等)均缺乏对应的 RBAC 装饰器,而其对应的写入接口则正确强制了权限检查。这可能是开发过程中只对写入接口添加权限校验,忽略了对读取接口的权限控制。
环境排查
- 确认 Dify 版本是否为 1.17.0(main 分支)或包含相同代码逻辑的版本。
- 确认部署方式是否为 Self Hosted(Docker),并检查部署版本是否为官方发布的稳定版本。
- 确认工作区是否已启用 RBAC 功能,且用户角色是否为不具备
AGENT_MANAGE权限的普通成员。 - 检查
api/controllers/console/agent/composer.py文件中AgentComposerApi.get方法(约 511-521 行)的装饰器列表,确认是否缺少@rbac_permission_required装饰器。 - 检查同文件中其他只读接口(如
AgentComposerCandidatesApi.get、WorkflowAgentComposerApi.get等)是否也存在相同的权限校验缺失。
解决步骤
- 备份原始文件:在修改前备份
api/controllers/console/agent/composer.py文件。 - 定位
AgentComposerApi.get方法:打开api/controllers/console/agent/composer.py,找到AgentComposerApi.get方法(约 517 行)。 - 添加 RBAC 装饰器:在
@with_session装饰器下方添加缺失的 RBAC 权限装饰器:@rbac_permission_required(RBACResourceScope.WORKSPACE, RBACPermission.AGENT_MANAGE, resource_required=False) - 检查其他接口(可优先尝试但未验证):如果希望全面修复,可检查并处理同文件中其他缺失 RBAC 装饰器的只读接口,包括
AgentComposerValidateApi.post、AgentComposerCandidatesApi.get、WorkflowAgentComposerApi.get、SnippetAgentComposerApi.get等。但建议先确认官方后续版本是否有更完整的修复方案。 - 重启服务:修改完成后重启 Dify API 服务使改动生效。
验证方法
在启用了 RBAC 的工作区中,使用不具备 AGENT_MANAGE 权限的普通成员账号重新调用 GET /console/api/agent/<agent_id>/composer 接口,确认返回 403 Forbidden 而不是完整的配置数据。同时使用具备 AGENT_MANAGE 权限的管理员账号验证接口仍可正常访问,确保权限校验未误伤正常用户。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。


