agentic_huge_data_base / wiki
页面 Dify · 8.3 基于角色的访问控制·DeepWiki 中文全文译文

8.3 · 基于角色的访问控制(Role-Based Access Control)

应用编排与外部知识接入 · 聚焦本章的模块关系、源码依据与实现要点。

项目Dify 章节8.3 状态全文译文 模块认证、权限与安全、接口与服务契约、界面与交互、测试、发布与运维
源码线索
  • api/controllers/console/__init__.py
  • api/controllers/console/admin.py
  • api/controllers/console/auth/data_source_oauth.py
  • api/controllers/console/auth/email_register.py
  • api/controllers/console/auth/error.py
  • api/controllers/console/auth/forgot_password.py
  • api/controllers/console/auth/login.py
  • api/controllers/console/auth/oauth.py
  • api/controllers/console/billing/billing.py
  • api/controllers/console/billing/compliance.py
模块标签
  • 认证、权限与安全
  • 接口与服务契约
  • 界面与交互
  • 测试、发布与运维
  • 模型调用与提供方适配

章节正文

基于角色的访问控制

基于角色的访问控制

相关源文件

本章引用的主要源码文件:

  • api/controllers/console/__init__.py
  • api/controllers/console/admin.py
  • api/controllers/console/auth/data_source_oauth.py
  • api/controllers/console/auth/email_register.py
  • api/controllers/console/auth/error.py
  • api/controllers/console/auth/forgot_password.py
  • api/controllers/console/auth/login.py
  • api/controllers/console/auth/oauth.py
  • api/controllers/console/billing/billing.py
  • api/controllers/console/billing/compliance.py
  • api/controllers/console/error.py
  • api/controllers/console/explore/installed_app.py
  • api/controllers/console/workspace/account.py
  • api/controllers/console/workspace/members.py
  • api/controllers/console/workspace/model_providers.py
  • api/controllers/console/workspace/models.py
  • api/controllers/console/workspace/plugin.py
  • api/controllers/console/workspace/workspace.py
  • api/controllers/console/wraps.py
  • api/controllers/service_api/wraps.py
  • api/libs/oauth.py
  • api/libs/oauth_data_source.py
  • api/schedule/mail_clean_document_notify_task.py
  • api/services/account_service.py
  • api/services/billing_service.py
  • api/services/feature_service.py
  • api/templates/change_mail_confirm_old_template_zh-CN.html
  • api/templates/transfer_workspace_owner_confirm_template_en-US.html
  • api/templates/without-brand/transfer_workspace_owner_confirm_template_en-US.html
  • api/tests/test_containers_integration_tests/services/test_billing_service.py
  • api/tests/unit_tests/controllers/console/workspace/test_workspace.py
  • api/tests/unit_tests/libs/test_oauth_clients.py
  • api/tests/unit_tests/services/test_account_service.py
  • api/tests/unit_tests/services/test_billing_service.py
  • web/app/components/header/account-setting/members-page/__tests__/index.spec.tsx
  • web/app/components/header/account-setting/members-page/index.tsx
  • web/app/components/header/account-setting/members-page/operation/__tests__/index.spec.tsx
  • web/app/components/header/account-setting/members-page/operation/index.tsx

目的与范围

本文档描述了 Dify 的基于角色的访问控制(RBAC)系统,该系统管理工作空间(租户)内的用户权限。系统实现了五层角色层级(OWNERADMINEDITORNORMALDATASET_OPERATOR),并为应用和数据集提供了资源级别的权限粒度。

关于认证方法和流程,请参阅认证方法与流程。关于租户隔离和资源作用域,请参阅租户模型与资源隔离。关于工作空间级别的设置和成员管理功能,请参阅工作空间与成员管理

角色层级

Dify 在 TenantAccountRole 枚举中实现了五种不同的角色,每种角色都具备特定的能力和限制。

角色定义
Dify · 角色定义 · 图 1
Dify · 角色定义 · 图 1

来源: api/models/account.py:19-77

角色枚举值关键能力
所有者owner完全控制工作空间、转移所有权、管理计费、拥有所有管理员能力。
管理员admin邀请/移除成员、分配角色(所有者除外)、拥有所有编辑者能力。
编辑者editor创建/编辑应用、工作流、数据集;运行工作流;发布变更。
普通用户normal对工作空间资源仅拥有查看权限。
数据集操作员dataset_operator创建/编辑数据集和文档,无应用/工作流权限。
角色校验方法

TenantAccountRole 枚举提供了静态校验方法,用于在代码库中通过编程方式确定访问级别。

Dify · 角色校验方法 · 图 2
Dify · 角色校验方法 · 图 2

来源: api/models/account.py:26-77

租户-账户角色关联

TenantAccountJoin 模型

TenantAccountJoin 模型建立了 AccountTenant 实体之间的多对多关系,并存储了用户在特定工作空间中被分配的特定 role

Dify · TenantAccountJoin 模型 · 图 3
Dify · TenantAccountJoin 模型 · 图 3

来源: api/models/account.py:279-302api/models/account.py:242-277

角色加载与切换

当通过 AccountService.load_user 加载 Account 时,系统会确定当前活跃的工作空间。如果没有工作空间被标记为 current,则默认使用第一个可用的 TenantAccountJoin 记录 api/services/account_service.py:177-187

Dify · 角色加载与切换 · 图 4
Dify · 角色加载与切换 · 图 4

来源: api/services/account_service.py:161-188

资源的权限级别

除了全局工作空间角色外,像数据集这样的单个资源也支持内部权限设置。

DatasetPermissionEnum

Dataset 模型使用 permission 字段来控制工作空间内的访问权限 api/models/dataset.py:126

  • ONLY_ME:仅创建者(所有者)可以查看和修改。
  • ALL_TEAM:所有工作空间成员都可以访问。
  • PARTIAL_TEAM:访问权限仅限于数据集权限映射中定义的特定成员。

来源: api/models/dataset.py:38-42api/models/dataset.py:44-83

账户权限属性

Account 模型提供了计算属性,用于快速进行权限检查。这些属性在控制器中被广泛用于保护端点。

属性实现逻辑
is_admin_or_ownerrole in {OWNER, ADMIN} api/models/account.py:195-201
has_edit_permissionrole in {OWNER, ADMIN, EDITOR} api/models/account.py:203-209
is_dataset_editorrole in {OWNER, ADMIN, EDITOR, DATASET_OPERATOR} api/models/account.py:211-217
is_dataset_operatorrole == DATASET_OPERATOR api/models/account.py:219-225

来源: api/models/account.py:195-235

在控制器中的实现

API 端点使用装饰器或直接属性检查来实施基于角色的访问控制。例如,DefaultModelApi 要求使用 is_admin_or_owner_required 装饰器来修改工作空间范围的设置。

# api/controllers/console/workspace/models.py
@is_admin_or_owner_required
def post(self):
    # 更新工作空间默认模型的逻辑

来源: api/controllers/console/workspace/models.py:148-150api/controllers/console/workspace/models.py:194-196

成员管理操作

角色分配规则

角色分配受层级限制。例如,MemberInviteEmailApi 在继续操作之前会检查分配的角色是否为非所有者角色 api/controllers/console/workspace/members.py:115-116,因为所有权只能通过特定流程进行转移。

来源: api/controllers/console/workspace/members.py:109-119

成员管理的 API 端点
操作端点所需角色描述
列出成员GET /workspaces/current/members需要登录通过 TenantService.get_tenant_members 检索所有成员 api/controllers/console/workspace/members.py:93-96
邀请成员POST /workspaces/current/members/invite-email管理员/所有者通过 RegisterService.invite_new_member 邀请 api/controllers/console/workspace/members.py:142-148
移除成员DELETE /workspaces/current/members/{member_id}管理员/所有者通过 TenantService.remove_member_from_tenant 移除 api/controllers/console/workspace/members.py:187

来源: api/controllers/console/workspace/members.py:75-90api/controllers/console/workspace/members.py:93-161api/controllers/console/workspace/members.py:163-187

所有权转移

所有权转移是一项高安全性的操作,仅限于当前的 OWNER 执行。它涉及使用令牌和电子邮件验证码的多步骤验证流程。

Dify · 所有权转移 · 图 5
Dify · 所有权转移 · 图 5

来源: api/controllers/console/workspace/members.py:226-254api/controllers/console/workspace/members.py:257-293api/controllers/console/workspace/members.py:296-335

权限矩阵总结

操作所有者管理员编辑者普通用户数据集操作员
工作空间管理
转移所有权
切换工作空间
成员管理
邀请成员
分配/更新角色
移除成员
资源管理
创建应用
编辑应用
创建数据集
编辑数据集
管理模型提供商

来源: api/models/account.py:19-77api/models/account.py:195-235api/controllers/console/workspace/members.py:109-119api/controllers/console/workspace/models.py:148-150