组 (Groups)
Open WebUI 中的组是一个用于大规模组织用户和管理访问控制的强大机制。它们有两个主要用途:
- 权限管理:高效地为多个用户分配细粒度权限。
- 资源访问控制:控制谁可以访问特定的私有资源(模型、知识库、工具)。
权限合并逻辑
Open WebUI 的权限是累加式的(基于并集)。
- 如果一个用户属于多个组,他们将获得所有权限的超集。
- 如果组 A 允许“生成图像”而组 B 不允许,那么同时属于这两个组的用户将拥有生成图像的权限。
- 不存在“拒绝”权限;您只能“授予”权限。
组管理
可以在管理员面板 > 组部分管理组。
组配置
在创建或编辑组时,您可以配置其在系统中的可见性:
- 允许组分享:(默认:开启)
- 启用:当用户分享聊天项目、模型或知识库列表时,该组将出现在“访问控制”下拉菜单中。适用于需要协作内容的团队或项目组。
- 禁用:该组在分享菜单中隐藏。这专为仅用于 RBAC 权限分配(例如授予“生成图像”权利)的组而设计。隐藏这些组可以防止分享 UI 被技术/管理组搞得杂乱无章。
策略:权限组 vs 共享组
为了保持系统的整洁和可管理,建议使用命名方案将组分为两个不同的类别:
-
权限组(例如,前缀为
[Perms]、Role-或P-)- 目的:专门用于授予功能权限(例如
[Perms] Image Gen、[Perms] Web Search)。 - 配置:禁用允许组分享。
- 结果:用户获得了所需的功能,但这些技术组不会充斥在“分享”菜单中。
- 目的:专门用于授予功能权限(例如
-
共享组(例如,前缀为
Team-、Project-或普通名称)- 目的:专门用于组织人员(例如
Marketing、Engineering、Team Alpha)以共享资源。 - 配置:启用允许组分享。
- 最佳实践:在这些组中禁用所有权限。
- 依靠全局默认权限(或单独的权限组)来获得功能权利。
- 为什么? 这确保了可以轻松地撤销权限。如果您决定全局禁用某个功能(例如“网页搜索”),它将立即对所有人生效。如果您的共享组启用了“网页搜索”,您将不得不手动更新每个组以移除该权利,因为组的
True状态会覆盖全局的False。保持功能组的纯粹性以维持全局控制。
- 目的:专门用于组织人员(例如
创建方法
- 手动创建:管理员可以通过 UI 手动创建组并添加用户。
- OAuth 同步:如果启用了
ENABLE_OAUTH_GROUP_MANAGEMENT,可以从您的 OAuth 提供商(例如 Keycloak、Azure AD)同步组。- 自动创建:启用
ENABLE_OAUTH_GROUP_CREATION后,本地不存在的组将被自动创建。 - 成员同步:严格根据 OAuth claims 添加/移除组中的用户。
- 自动创建:启用
组结构
组定义通常包括:
- 名称:组的显示名称。
- 描述:组的用途。
- 权限:覆盖默认用户权限的详细 JSON 对象(请参阅权限)。
- 成员:属于该组的用户 ID 列表。
为组分配权限
编辑组时,您可以切换特定权限。
- 默认状态:默认情况下,组不授予额外权限;成员依赖于全局默认设置。
- 授予访问权限:为组将某个权限(例如“网页搜索”)切换为开启,意味着即使全局禁用了该功能,所有成员也将获得该功能。
资源访问 (RBAC)
您可以使用组来限制对特定对象(如专有模型或敏感知识库)的访问。
- 标记资源:在创建/编辑模型或知识库时,将其可见性设置为私有或受限。
- 授予访问权限:选择应具有“读取”或“写入”访问 权限的特定组(或单个用户)。
访问控制对象
在更深层级,资源存储了一个如下所示的访问控制列表 (ACL):
{
"read": {
"group_ids": ["marketing-team-id", "admins-id"],
"user_ids": []
},
"write": {
"group_ids": ["admins-id"],
"user_ids": ["editor-user-id"]
}
}
- 读取 (Read):用户可以查看并使用该资源。
- 写入 (Write):用户可以更新或删除该资源。