Skip to main content

组 (Groups)

Open WebUI 中的组是一个用于大规模组织用户和管理访问控制的强大机制。它们有两个主要用途:

  1. 权限管理:高效地为多个用户分配细粒度权限。
  2. 资源访问控制:控制谁可以访问特定的私有资源(模型、知识库、工具)。
权限合并逻辑

Open WebUI 的权限是累加式的(基于并集)。

  • 如果一个用户属于多个组,他们将获得所有权限的超集
  • 如果组 A 允许“生成图像”而组 B 不允许,那么同时属于这两个组的用户拥有生成图像的权限。
  • 不存在“拒绝”权限;您只能“授予”权限。

组管理

可以在管理员面板 > 组部分管理组。

组配置

在创建或编辑组时,您可以配置其在系统中的可见性:

  • 允许组分享:(默认:开启
    • 启用:当用户分享聊天项目、模型或知识库列表时,该组将出现在“访问控制”下拉菜单中。适用于需要协作内容的团队或项目组。
    • 禁用:该组在分享菜单中隐藏。这专为仅用于 RBAC 权限分配(例如授予“生成图像”权利)的组而设计。隐藏这些组可以防止分享 UI 被技术/管理组搞得杂乱无章。
策略:权限组 vs 共享组

为了保持系统的整洁和可管理,建议使用命名方案将组分为两个不同的类别:

  1. 权限组(例如,前缀为 [Perms]Role-P-

    • 目的:专门用于授予功能权限(例如 [Perms] Image Gen[Perms] Web Search)。
    • 配置:禁用允许组分享
    • 结果:用户获得了所需的功能,但这些技术组不会充斥在“分享”菜单中。
  2. 共享组(例如,前缀为 Team-Project- 或普通名称)

    • 目的:专门用于组织人员(例如 MarketingEngineeringTeam Alpha)以共享资源。
    • 配置:启用允许组分享
    • 最佳实践:在这些组中禁用所有权限
      • 依靠全局默认权限(或单独的权限组)来获得功能权利。
      • 为什么? 这确保了可以轻松地撤销权限。如果您决定全局禁用某个功能(例如“网页搜索”),它将立即对所有人生效。如果您的共享组启用了“网页搜索”,您将不得不手动更新每个组以移除该权利,因为组的 True 状态会覆盖全局的 False。保持功能组的纯粹性以维持全局控制。

创建方法

  • 手动创建:管理员可以通过 UI 手动创建组并添加用户。
  • OAuth 同步:如果启用了 ENABLE_OAUTH_GROUP_MANAGEMENT,可以从您的 OAuth 提供商(例如 Keycloak、Azure AD)同步组。
    • 自动创建:启用 ENABLE_OAUTH_GROUP_CREATION 后,本地不存在的组将被自动创建。
    • 成员同步:严格根据 OAuth claims 添加/移除组中的用户。

组结构

组定义通常包括:

  • 名称:组的显示名称。
  • 描述:组的用途。
  • 权限:覆盖默认用户权限的详细 JSON 对象(请参阅权限)。
  • 成员:属于该组的用户 ID 列表。

为组分配权限

编辑组时,您可以切换特定权限。

  • 默认状态:默认情况下,组不授予额外权限;成员依赖于全局默认设置。
  • 授予访问权限:为组将某个权限(例如“网页搜索”)切换为开启,意味着即使全局禁用了该功能,所有成员也将获得该功能。

资源访问 (RBAC)

您可以使用组来限制对特定对象(如专有模型或敏感知识库)的访问。

  1. 标记资源:在创建/编辑模型或知识库时,将其可见性设置为私有受限
  2. 授予访问权限:选择应具有“读取”或“写入”访问权限的特定(或单个用户)。

访问控制对象

在更深层级,资源存储了一个如下所示的访问控制列表 (ACL):

{
"read": {
"group_ids": ["marketing-team-id", "admins-id"],
"user_ids": []
},
"write": {
"group_ids": ["admins-id"],
"user_ids": ["editor-user-id"]
}
}
  • 读取 (Read):用户可以查看并使用该资源。
  • 写入 (Write):用户可以更新或删除该资源。