agentic_huge_data_base / wiki
页面 Dify · 8.4 工作空间与成员管理·DeepWiki 中文全文译文

8.4 · 工作空间与成员管理(Workspace and Member Management)

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

项目Dify 章节8.4 状态全文译文 模块系统架构、认证、权限与安全、配置治理、文档对象与元数据
源码线索
  • 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/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/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/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/libs/oauth.py
  • api/libs/oauth_data_source.py
  • api/schedule/mail_clean_document_notify_task.py
  • api/services/account_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/unit_tests/libs/test_oauth_clients.py
  • api/tests/unit_tests/services/test_account_service.py
  • web/app/components/base/file-icon/index.tsx
  • web/app/components/base/icons/src/public/files/index.ts
  • web/app/components/base/tag-input/index.tsx
  • web/app/components/datasets/create/assets/docx.svg
  • web/app/components/datasets/documents/style.module.css
  • web/app/components/datasets/settings/permission-selector/index.tsx
  • web/app/components/header/account-setting/data-source-page-new/configure.tsx
  • web/app/components/header/account-setting/data-source-page-new/operator.tsx
  • 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/invite-modal/__tests__/index.spec.tsx
  • web/app/components/header/account-setting/members-page/invite-modal/role-selector.tsx
  • web/app/components/header/account-setting/members-page/invited-modal/index.tsx
  • web/app/components/header/account-setting/members-page/invited-modal/invitation-link.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
  • web/app/components/header/account-setting/members-page/transfer-ownership-modal/__tests__/index.spec.tsx
  • web/app/components/header/account-setting/members-page/transfer-ownership-modal/index.tsx
  • web/app/components/header/account-setting/members-page/transfer-ownership-modal/member-selector.tsx
  • web/app/components/header/account-setting/model-provider-page/model-auth/add-custom-model.tsx
  • web/app/components/header/account-setting/model-provider-page/model-auth/authorized/index.tsx
  • web/app/components/header/account-setting/model-provider-page/model-auth/credential-selector.tsx
  • web/app/components/header/account-setting/model-provider-page/model-parameter-modal/parameter-item.tsx
  • web/assets/docx.svg

本文档介绍了 Dify 中的工作区(租户)管理操作、成员生命周期管理以及基于许可证的功能限制。内容涵盖工作区的增删改查(CRUD)操作、成员邀请工作流、角色更新、成员移除、所有者转移,以及许可证/品牌配置如何控制工作区功能。

有关底层租户和账户数据模型的信息,请参见第 8.1 页。有关基于角色的权限实施,请参见第 8.3 页。有关认证机制,请参见第 8.2 页。

工作区数据模型

核心实体

工作区管理系统基于 Tenant(工作区)实体及其通过 TenantAccountJoinAccount 建立的多对多关系构建:

Dify · 核心实体 · 图 1
Dify · 核心实体 · 图 1

来源api/models/account.py:36-45, api/models/account.py:330-370

工作区状态值

TenantStatus 枚举定义了工作区的状态:

状态描述
NORMAL活跃工作区,功能完全正常
ARCHIVE已归档工作区,只读或受限访问

来源api/models/account.py:45-45

成员角色

TenantAccountRole 枚举定义了具有层级权限的角色级别:

角色权限
OWNER完全控制权,包括删除工作区、转移所有权、计费
ADMIN用户管理、应用/数据集创建和管理
EDITOR应用/数据集创建和编辑
NORMAL查看和使用应用/数据集
DATASET_OPERATOR仅管理数据集,不能管理应用

来源api/models/account.py:43-43, api/controllers/console/workspace/members.py:32-32

工作区操作

工作区 CRUD 服务层

TenantService 类提供了工作区管理操作:

Dify · 工作区 CRUD 服务层 · 图 2
Dify · 工作区 CRUD 服务层 · 图 2

来源api/services/account_service.py:987-1489

工作区列表 API

/workspaces 端点返回用户所属的所有工作区:

端点GET /console/api/workspaces

请求流程

  1. current_account_with_tenant() 获取当前用户和租户 ID api/controllers/console/workspace/workspace.py:148-148
  2. 调用 TenantService.get_join_tenants(current_user) 获取成员关系 api/controllers/console/workspace/workspace.py:149-149
  3. 对于每个工作区,如果是 CLOUD 版本,则从 BillingService 获取计费计划信息 api/controllers/console/workspace/workspace.py:155-158
  4. 返回包含计费计划信息的工作区列表 api/controllers/console/workspace/workspace.py:187-187

来源api/controllers/console/workspace/workspace.py:142-188

工作区切换

/workspaces/switch 端点用于更改用户的活跃工作区:

端点POST /console/api/workspaces/switch

实现:调用 TenantService.switch_tenant(),该方法会更新 TenantAccountJoin 表中的 current 标志 api/services/account_service.py:1293-1324

来源api/controllers/console/workspace/workspace.py:246-255, api/services/account_service.py:1293-1324

成员邀请系统

邀请流程架构
Dify · 邀请流程架构 · 图 3
Dify · 邀请流程架构 · 图 3

来源api/controllers/console/workspace/members.py:99-169, api/services/account_service.py:1675-1837

邀请令牌生成

RegisterService.invite_new_member() 方法编排了邀请流程:

  1. 邮箱标准化:将被邀请者邮箱转换为小写 api/controllers/console/workspace/members.py:138-138
  2. 权限检查:检查工作区成员邀请的权限 api/controllers/console/workspace/members.py:125-127
  3. 限制检查:通过 FeatureService 验证工作区成员上限 api/controllers/console/workspace/members.py:132-135
  4. 令牌生成:使用 TokenManager.generate_token() 生成类型为 "invitation" 的令牌 api/services/account_service.py:1711-1711
  5. 邮件发送:将 send_invite_member_mail_task Celery 任务加入队列 api/services/account_service.py:1733-1733

来源api/services/account_service.py:1675-1837, api/controllers/console/workspace/members.py:99-169

许可证与权限检查

第一层 - 许可证/计划检查:通过 @cloud_edition_billing_resource_check("members") 装饰器实现 api/controllers/console/workspace/members.py:107-107

第二层 - 工作区策略检查:通过 check_workspace_member_invite_permission(tenant_id) 实现 api/controllers/console/workspace/members.py:127-127

来源api/controllers/console/workspace/members.py:99-169, api/libs/workspace_permission.py:21-45

成员管理

列出工作区成员

端点GET /console/api/workspaces/current/members

实现TenantService.get_tenant_members(current_user.current_tenant) 获取与当前工作区关联的所有成员 api/controllers/console/workspace/members.py:93-93

来源api/controllers/console/workspace/members.py:81-96, api/services/account_service.py:1137-1157

更新成员角色

端点PUT /console/api/workspaces/current/members/<member_id>/update-role

授权:只有工作区所有者和管理员可以更新角色。通过 TenantService.update_member_role() 中的内部逻辑强制执行 api/services/account_service.py:1235-1291

来源api/controllers/console/workspace/members.py:235-266, api/services/account_service.py:1235-1291

移除成员

端点DELETE /console/api/workspaces/current/members/<member_id>

实现TenantService.remove_member_from_tenant() 执行检查,确保用户不是移除自己,并且具有适当的权限 api/services/account_service.py:1192-1233

来源api/controllers/console/workspace/members.py:171-193, api/services/account_service.py:1192-1233

所有者转移系统

所有者转移架构
Dify · 所有者转移架构 · 图 4
Dify · 所有者转移架构 · 图 4

来源api/controllers/console/workspace/members.py:286-430, api/services/account_service.py:561-627

所有者转移速率限制

系统实现了多层速率限制,以防止滥用所有者转移流程:

速率限制窗口最大尝试次数描述
邮件发送owner_transfer_rate_limit60 秒1限制验证邮件发送频率 api/services/account_service.py:133-133
验证码验证OWNER_TRANSFER_MAX_ERROR_LIMITS不适用5限制验证码错误尝试次数 api/services/account_service.py:138-138

来源api/services/account_service.py:133-138, api/services/account_service.py:913-939

工作区自定义配置

自定义品牌设置

端点POST /console/api/workspaces/custom-config

授权:需要 @cloud_edition_billing_resource_check("workspace_custom") 装饰器 api/controllers/console/workspace/workspace.py:254-254

实现:更新 Tenant.custom_config_dict JSON 字段,包含品牌设置,如 remove_webapp_brandreplace_webapp_logo api/controllers/console/workspace/workspace.py:276-281

来源api/controllers/console/workspace/workspace.py:248-312

企业工作区权限

权限检查函数

workspace_permission.py 模块提供了与 EnterpriseService 集成的权限检查:

成员邀请权限check_workspace_member_invite_permission(workspace_id) 验证当前工作区策略是否允许邀请 api/libs/workspace_permission.py:21-45

所有者转移权限check_workspace_owner_transfer_permission(workspace_id) 验证工作区是否允许所有权转移 api/libs/workspace_permission.py:47-74

来源api/libs/workspace_permission.py:21-74

工作区权限 API

端点GET /console/api/workspaces/current/permission

授权:需要 @only_edition_enterprise 装饰器 api/controllers/console/workspace/workspace.py:338-338

实现:调用 EnterpriseService.WorkspacePermissionService.get_permission(tenant_id) 获取特定的权限设置 api/controllers/console/workspace/workspace.py:357-357

来源api/controllers/console/workspace/workspace.py:335-361

与 OAuth 和激活的集成

带邀请令牌的 OAuth

OAuth 登录流程支持将邀请令牌作为状态参数传递:

实现OAuthCallback.get() 检查 OAuth 状态中是否存在 invite_token。如果存在,则验证令牌并确保用户邮箱与邀请邮箱匹配,然后完成流程 api/controllers/console/auth/oauth.py:152-162

来源api/controllers/console/auth/oauth.py:109-162