Pārlūkot izejas kodu

feat: direct tools user permissions

Timothy Jaeryang Baek 1 mēnesi atpakaļ
vecāks
revīzija
7eea95a48c

+ 6 - 0
backend/open_webui/config.py

@@ -1034,6 +1034,11 @@ USER_PERMISSIONS_CHAT_TEMPORARY_ENFORCED = (
     == "true"
 )
 
+USER_PERMISSIONS_FEATURES_DIRECT_TOOL_SERVERS = (
+    os.environ.get("USER_PERMISSIONS_FEATURES_DIRECT_TOOL_SERVERS", "False").lower()
+    == "true"
+)
+
 USER_PERMISSIONS_FEATURES_WEB_SEARCH = (
     os.environ.get("USER_PERMISSIONS_FEATURES_WEB_SEARCH", "True").lower() == "true"
 )
@@ -1071,6 +1076,7 @@ DEFAULT_USER_PERMISSIONS = {
         "temporary_enforced": USER_PERMISSIONS_CHAT_TEMPORARY_ENFORCED,
     },
     "features": {
+        "direct_tool_servers": USER_PERMISSIONS_FEATURES_DIRECT_TOOL_SERVERS,
         "web_search": USER_PERMISSIONS_FEATURES_WEB_SEARCH,
         "image_generation": USER_PERMISSIONS_FEATURES_IMAGE_GENERATION,
         "code_interpreter": USER_PERMISSIONS_FEATURES_CODE_INTERPRETER,

+ 1 - 0
backend/open_webui/routers/users.py

@@ -93,6 +93,7 @@ class ChatPermissions(BaseModel):
 
 
 class FeaturesPermissions(BaseModel):
+    direct_tool_servers: bool = False
     web_search: bool = True
     image_generation: bool = True
     code_interpreter: bool = True

+ 1 - 0
src/lib/components/admin/Users/Groups.svelte

@@ -67,6 +67,7 @@
 			temporary_enforced: false
 		},
 		features: {
+			direct_tool_servers: false,
 			web_search: true,
 			image_generation: true,
 			code_interpreter: true

+ 7 - 0
src/lib/components/admin/Users/Groups/EditGroupModal.svelte

@@ -38,6 +38,12 @@
 			prompts: false,
 			tools: false
 		},
+		sharing: {
+			public_models: false,
+			public_knowledge: false,
+			public_prompts: false,
+			public_tools: false
+		},
 		chat: {
 			controls: true,
 			file_upload: true,
@@ -46,6 +52,7 @@
 			temporary: true
 		},
 		features: {
+			direct_tool_servers: false,
 			web_search: true,
 			image_generation: true,
 			code_interpreter: true

+ 9 - 0
src/lib/components/admin/Users/Groups/Permissions.svelte

@@ -28,6 +28,7 @@
 			temporary_enforced: false
 		},
 		features: {
+			direct_tool_servers: false,
 			web_search: true,
 			image_generation: true,
 			code_interpreter: true
@@ -295,6 +296,14 @@
 	<div>
 		<div class=" mb-2 text-sm font-medium">{$i18n.t('Features Permissions')}</div>
 
+		<div class="  flex w-full justify-between my-2 pr-2">
+			<div class=" self-center text-xs font-medium">
+				{$i18n.t('Direct Tool Servers')}
+			</div>
+
+			<Switch bind:state={permissions.features.direct_tool_servers} />
+		</div>
+
 		<div class="  flex w-full justify-between my-2 pr-2">
 			<div class=" self-center text-xs font-medium">
 				{$i18n.t('Web Search')}

+ 1 - 1
src/lib/components/chat/SettingsModal.svelte

@@ -488,7 +488,7 @@
 								</button>
 							{/if}
 						{:else if tabId === 'tools'}
-							{#if $user?.role === 'admin' || ($user?.role === 'user' && $config?.features?.enable_direct_tools)}
+							{#if $user?.role === 'admin' || ($user?.role === 'user' && $user?.permissions?.features?.direct_tool_servers)}
 								<button
 									class="px-0.5 py-1 min-w-fit rounded-lg flex-1 md:flex-none flex text-left transition {selectedTab ===
 									'tools'