security(api): GET /workspaces/current/default-model and /model-providers/{provider}/models missing admin and RBAC permission decorators

该报错是 Dify 1.14.2(main 分支)在开启 RBAC 的工作区中,普通成员可以绕过权限校验读取工作区默认模型和模型提供商配置。优先排查 api/controllers/console/workspace/models.py 中 DefaultModelApi.get 和 ModelPr

快速结论:该报错是 Dify 1.14.2(main 分支)在开启 RBAC 的工作区中,普通成员可以绕过权限校验读取工作区默认模型和模型提供商配置。优先排查 api/controllers/console/workspace/models.pyDefaultModelApi.getModelProviderModelApi.get 方法是否缺少管理员和 RBAC 权限装饰器。

适用环境:Dify 1.14.2(main 分支),Self Hosted(Docker),已启用 RBAC 的工作区。

最快修复方案:暂无确认的一步修复方案(Issue 尚未合并修复 PR)。可优先尝试为两个 GET 方法手动补充 @is_admin_or_owner_required@rbac_permission_required 装饰器。

注意事项:该修复方案来自 Issue 讨论中的代码级分析,尚未经过官方合并验证;修改后需要重启 Dify API 服务使配置生效。

问题场景

在启用了 RBAC 的 Dify 工作区中,使用没有 Admin/Owner 角色或 PLUGIN_PREFERENCES RBAC 权限的普通工作区成员账号登录,调用 GET /console/api/workspaces/current/default-modelGET /console/api/workspaces/current/model-providers/{provider}/models 接口。

报错原文

security(api): GET /workspaces/current/default-model and /model-providers/{provider}/models missing admin and RBAC permission decorators

In api/controllers/console/workspace/models.py:
- DefaultModelApi.get (line ~211) is missing @is_admin_or_owner_required and @rbac_permission_required
- ModelProviderModelApi.get (line ~264) is missing @is_admin_or_owner_required and @rbac_permission_required

原因分析

在 Dify 1.14.2 版本中,为模型配置相关的写方法(POST/DELETE)添加 RBAC 装饰器时,遗漏了同类的 GET 方法,导致普通工作区成员可以读取本应受权限保护的默认模型和模型提供商配置信息。这是一个典型的权限校验遗漏问题——写操作有权限限制,但对应的读操作没有同步添加权限控制。

环境排查

  • 确认 Dify 版本为 1.14.2 或 main 分支的相近版本
  • 确认工作区已启用 RBAC 功能
  • 检查 api/controllers/console/workspace/models.py 中指定的行号是否与 Issue 描述一致
  • 确认 is_admin_or_owner_requiredrbac_permission_requiredRBACPermissionRBACResourceScope 均已正确导入

解决步骤

  1. 打开 api/controllers/console/workspace/models.py 文件,定位到 DefaultModelApi.get 方法(约第 211 行)。
  2. 在现有的 @setup_required@login_required 装饰器之后,添加以下两个装饰器:
    @is_admin_or_owner_required
    @rbac_permission_required(RBACResourceScope.WORKSPACE, RBACPermission.PLUGIN_PREFERENCES, resource_required=False)
  3. 定位到 ModelProviderModelApi.get 方法(约第 264 行),使用相同方式补充上述两个装饰器。
  4. 确保文件顶部已包含所需的 import(Issue 确认这些 import 已存在)。
  5. 保存修改并重启 Dify API 服务。

验证方法

使用无管理员权限的普通工作区成员账号,再次调用 GET /console/api/workspaces/current/default-model,应当返回 403 Forbidden 而非正常的模型配置数据。同时使用管理员账号调用相同接口,确认功能正常可用。

参考来源

langgenius/dify #41099

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 19812

发表回复

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