快速结论:这是 Dify 1.14.2 及 main 分支中一个已确认的权限绕过缺陷,发生在启用了 RBAC 的工作区中,普通成员可通过 GET 请求列出数据源认证凭据而无需数据集编辑或凭证管理权限。优先排查 Dify 的 api/controllers/console/datasets/rag_pipeline/datasource_auth.py 文件中 DatasourceAuth.get 方法的装饰器配置。
适用环境:Dify 1.14.2(main 分支),Self Hosted(Docker)部署方式,启用 RBAC 的工作区。
最快修复方案:暂无确认的一步修复方案。已确认需要为 DatasourceAuth.get 方法添加 @edit_permission_required 和 @rbac_permission_required 两个装饰器,但需等待官方补丁或自行修改代码。
注意事项:该修复涉及权限模型,建议在测试环境验证后再部署到生产环境;同时需注意 Issue 中提到的 post 方法使用的是 CREDENTIAL_CREATE,而其他写端点使用 CREDENTIAL_MANAGE,GET 方法应使用哪个权限范围还需维护者确认。
问题场景
在启用了 RBAC 的 Dify 工作区中,管理员或编辑者配置了数据源供应商凭据(如 Jina、Firecrawl)。当以不具有数据集编辑或 credential_manage RBAC 权限的普通工作区成员登录后,调用 GET /console/api/auth/plugin/datasource/<provider_id> 接口,请求会成功返回该供应商的数据源凭据列表。而同端点的 POST 方法(创建凭据)以及该文件中的其他写端点(删除、更新、custom-client、default、update-name)都正确执行了权限校验,返回 403。
报错原文
security(api): GET /auth/plugin/datasource/{provider_id} missing edit and RBAC permission decorators
原因分析
根本原因是权限装饰器遗漏。在 api/controllers/console/datasets/rag_pipeline/datasource_auth.py 文件中,DatasourceAuth.get 方法只声明了 @setup_required、@login_required、@account_initialization_required、@with_current_user 和 @with_current_tenant_id,缺少 @edit_permission_required 和 @rbac_permission_required。在引入 RBAC 功能时,GET 方法没有同步更新以匹配同类的其他端点。
环境排查
- 确认 Dify 版本是否为 1.14.2 或更新的 main 分支代码。
- 确认工作区已启用 RBAC 功能。
- 检查部署方式是否为 Docker Self Hosted。
- 确认
api/controllers/console/datasets/rag_pipeline/datasource_auth.py文件中DatasourceAuth.get方法的装饰器配置。
解决步骤
- 定位
api/controllers/console/datasets/rag_pipeline/datasource_auth.py文件,找到DatasourceAuth.get方法(约第 336 行)。 - 在
@with_current_user装饰器之前,添加缺失的两个装饰器:@edit_permission_required和@rbac_permission_required(RBACResourceScope.DATASET, RBACPermission.CREDENTIAL_MANAGE, resource_required=False)。 - 参考同文件中的其他写端点(如
DatasourceAuth.post)确认装饰器顺序和参数格式。 - 在测试环境验证修复效果后,再部署到生产环境。
验证方法
使用普通工作区成员账号(无数据集编辑或 credential_manage 权限)调用 GET /console/api/auth/plugin/datasource/<provider_id>,确认返回 403 Forbidden;以管理员或具有相应权限的用户调用,确认仍能正常返回凭据列表。
参考来源
AI 工具推荐
想把多个 AI 模型放在一个入口?
GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。
推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。
这个方案解决了吗?
可以继续搜索完整报错,或查看同一工具的其他排查指南。
![[Question]: How to deal with the situation that the user_id returned in the Conversation table in the database is null?](https://www.chat-gpts.plus/wp-content/uploads/2026/08/7940-bcfd3c79-768x403.jpg)
![[Question]: dependency failed to start: container ragflow-mysql is unhealthy](https://www.chat-gpts.plus/wp-content/uploads/2026/08/7501-3cad0829-768x403.jpg)
