快速结论:该报错发生在启用了 RBAC 权限控制的 Dify 工作区中,普通工作区成员(非 Admin/Owner 且无 CREDENTIAL_MANAGE 权限)可以通过 GET /data-source/integrates 接口查看所有数据源 OAuth 集成信息,因为该接口缺少管理员及 RBAC 权限装饰器。优先排查 api/controllers/console/datasets/data_source.py 中 DataSourceApi.get 方法的装饰器是否完整。
适用环境:Dify 1.14.2(main 分支),Docker 自托管部署,启用了 RBAC 权限控制的工作区。
最快修复方案:暂无确认的一步修复方案。Issue 中提出了修复建议:在 DataSourceApi.get 方法上添加 @is_admin_or_owner_required 和 @rbac_permission_required(RBACResourceScope.WORKSPACE, RBACPermission.CREDENTIAL_MANAGE, resource_required=False) 两个装饰器,与同类的 PATCH 方法保持一致。
注意事项:该修复建议基于 Issue 中的代码分析,属于可行方案但尚未在 Issue 中明确标注已通过合并 PR 验证。装饰器顺序需与 patch 方法保持一致,即放在 @account_initialization_required 之前。
问题场景
用户在启用了 RBAC 权限控制的 Dify 工作区中,以普通工作区成员身份(非 Admin/Owner 角色,且无 CREDENTIAL_MANAGE RBAC 权限)登录后,发送 GET /console/api/data-source/integrates 请求。请求竟然成功返回了工作区所有数据源集成信息及其来源详情(DataSourceOauthBinding),而向同一端点发送 PATCH 请求时却会正确返回 403 Forbidden。问题出现在 Dify 的 API 控制器文件中。
报错原文
security(api): GET /data-source/integrates missing admin and RBAC permission decorators
原因分析
可能原因:在 api/controllers/console/datasets/data_source.py 文件中,DataSourceApi.get 方法(约第 140 行)只包含了以下装饰器:
@setup_required@login_required@account_initialization_required@with_current_tenant_id
缺少了 @is_admin_or_owner_required 和 @rbac_permission_required(RBACResourceScope.WORKSPACE, RBACPermission.CREDENTIAL_MANAGE, resource_required=False) 两个权限装饰器。而在同一个类中的 DataSourceApi.patch 方法(约第 191 行)则正确地同时执行了这两个权限检查。根本原因是在为 DataSourceApi.patch 添加 RBAC 装饰器时,同类的 get 方法被遗漏了。
环境排查
- Dify 版本:1.14.2(main 分支)
- 部署方式:Docker 自托管(Self Hosted)
- 工作区需启用 RBAC 权限控制
- 涉及文件:
api/controllers/console/datasets/data_source.py - 相关权限:
CREDENTIAL_MANAGE的 RBAC 权限,RBACResourceScope.WORKSPACE资源范围
解决步骤
- 打开文件
api/controllers/console/datasets/data_source.py,定位到DataSourceApi.get方法(约第 140 行)。 - 按照 Issue 中建议的装饰器顺序,在现有装饰器基础上添加两个权限装饰器(放在
@account_initialization_required之前):
@is_admin_or_owner_required
@rbac_permission_required(RBACResourceScope.WORKSPACE, RBACPermission.CREDENTIAL_MANAGE, resource_required=False) - 确认所需的导入(import)已经存在于文件顶部(约第 35-45 行),无需额外添加。
- 如果确认修改有效,可提交 PR 到 Dify 仓库;文件中的导入项已完整,这属于一行变更的修复。
验证方法
修复后,以普通工作区成员身份(非 Admin/Owner 且无 CREDENTIAL_MANAGE 权限)发送 GET /console/api/data-source/integrates 请求,应返回 403 Forbidden,与 PATCH 方法的响应一致;使用 Admin 或具备相应 RBAC 权限的用户请求则仍能正常访问。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[DSpark] Native graph assertion on Apple Silicon with official LFM2.5-2.6B DSpark GGUF](https://www.chat-gpts.plus/wp-content/uploads/2026/08/27528-0cf76c3f-768x403.jpg)

