From 803b2e35bee95abf21f2563bb59e670c5f77a4ea Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 26 Aug 2025 15:05:35 +0400 Subject: [PATCH] enh: delete_message, continue_response, regenerate_response, rate_response user permissions Co-Authored-By: G30 <50341825+silentoplayz@users.noreply.github.com> --- backend/open_webui/config.py | 21 ++ backend/open_webui/routers/users.py | 4 + src/lib/components/admin/Users/Groups.svelte | 4 + .../admin/Users/Groups/EditGroupModal.svelte | 4 + .../admin/Users/Groups/Permissions.svelte | 40 ++- .../chat/Messages/ResponseMessage.svelte | 242 +++++++++--------- .../chat/Messages/UserMessage.svelte | 52 ++-- 7 files changed, 221 insertions(+), 146 deletions(-) diff --git a/backend/open_webui/config.py b/backend/open_webui/config.py index ded5208d6b..1fe031cdad 100644 --- a/backend/open_webui/config.py +++ b/backend/open_webui/config.py @@ -1208,6 +1208,23 @@ USER_PERMISSIONS_CHAT_DELETE = ( os.environ.get("USER_PERMISSIONS_CHAT_DELETE", "True").lower() == "true" ) +USER_PERMISSIONS_CHAT_DELETE_MESSAGE = ( + os.environ.get("USER_PERMISSIONS_CHAT_DELETE_MESSAGE", "True").lower() == "true" +) + +USER_PERMISSIONS_CHAT_CONTINUE_RESPONSE = ( + os.environ.get("USER_PERMISSIONS_CHAT_CONTINUE_RESPONSE", "True").lower() == "true" +) + +USER_PERMISSIONS_CHAT_REGENERATE_RESPONSE = ( + os.environ.get("USER_PERMISSIONS_CHAT_REGENERATE_RESPONSE", "True").lower() + == "true" +) + +USER_PERMISSIONS_CHAT_RATE_RESPONSE = ( + os.environ.get("USER_PERMISSIONS_CHAT_RATE_RESPONSE", "True").lower() == "true" +) + USER_PERMISSIONS_CHAT_EDIT = ( os.environ.get("USER_PERMISSIONS_CHAT_EDIT", "True").lower() == "true" ) @@ -1290,6 +1307,10 @@ DEFAULT_USER_PERMISSIONS = { "params": USER_PERMISSIONS_CHAT_PARAMS, "file_upload": USER_PERMISSIONS_CHAT_FILE_UPLOAD, "delete": USER_PERMISSIONS_CHAT_DELETE, + "delete_message": USER_PERMISSIONS_CHAT_DELETE_MESSAGE, + "continue_response": USER_PERMISSIONS_CHAT_CONTINUE_RESPONSE, + "regenerate_response": USER_PERMISSIONS_CHAT_REGENERATE_RESPONSE, + "rate_response": USER_PERMISSIONS_CHAT_RATE_RESPONSE, "edit": USER_PERMISSIONS_CHAT_EDIT, "share": USER_PERMISSIONS_CHAT_SHARE, "export": USER_PERMISSIONS_CHAT_EXPORT, diff --git a/backend/open_webui/routers/users.py b/backend/open_webui/routers/users.py index 7b27b45b9d..4d2539a18e 100644 --- a/backend/open_webui/routers/users.py +++ b/backend/open_webui/routers/users.py @@ -146,6 +146,10 @@ class ChatPermissions(BaseModel): params: bool = True file_upload: bool = True delete: bool = True + delete_message: bool = True + continue_response: bool = True + regenerate_response: bool = True + rate_response: bool = True edit: bool = True share: bool = True export: bool = True diff --git a/src/lib/components/admin/Users/Groups.svelte b/src/lib/components/admin/Users/Groups.svelte index 19f7c52d75..9a6412a485 100644 --- a/src/lib/components/admin/Users/Groups.svelte +++ b/src/lib/components/admin/Users/Groups.svelte @@ -71,6 +71,10 @@ params: true, file_upload: true, delete: true, + delete_message: true, + continue_response: true, + regenerate_response: true, + rate_response: true, edit: true, share: true, export: true, diff --git a/src/lib/components/admin/Users/Groups/EditGroupModal.svelte b/src/lib/components/admin/Users/Groups/EditGroupModal.svelte index 1bec9b76b6..151735e3d1 100644 --- a/src/lib/components/admin/Users/Groups/EditGroupModal.svelte +++ b/src/lib/components/admin/Users/Groups/EditGroupModal.svelte @@ -53,6 +53,10 @@ params: true, file_upload: true, delete: true, + delete_message: true, + continue_response: true, + regenerate_response: true, + rate_response: true, edit: true, share: true, export: true, diff --git a/src/lib/components/admin/Users/Groups/Permissions.svelte b/src/lib/components/admin/Users/Groups/Permissions.svelte index 143d20bc30..43cc7b0dba 100644 --- a/src/lib/components/admin/Users/Groups/Permissions.svelte +++ b/src/lib/components/admin/Users/Groups/Permissions.svelte @@ -26,6 +26,10 @@ params: true, file_upload: true, delete: true, + delete_message: true, + continue_response: true, + regenerate_response: true, + rate_response: true, edit: true, share: true, export: true, @@ -292,6 +296,14 @@ {/if} +
+
+ {$i18n.t('Allow Chat Edit')} +
+ + +
+
{$i18n.t('Allow Chat Delete')} @@ -302,10 +314,34 @@
- {$i18n.t('Allow Chat Edit')} + {$i18n.t('Allow Delete Messages')}
- + +
+ +
+
+ {$i18n.t('Allow Continue Response')} +
+ + +
+ +
+
+ {$i18n.t('Allow Response Regeneration')} +
+ + +
+ +
+
+ {$i18n.t('Allow Response Rating')} +
+ +
diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index 36699471d0..6010fa48d3 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -1227,7 +1227,7 @@ {/if} {#if !readOnly} - {#if !$temporaryChatEnabled && ($config?.features.enable_message_rating ?? true)} + {#if !$temporaryChatEnabled && ($config?.features.enable_message_rating ?? true) && ($user?.role === 'admin' || ($user?.permissions?.chat?.rate_response ?? true))} - - {/if} + /> - {#if siblings.length > 1} - - - + + + + {/if} + {/if} + + {#if $user?.role === 'admin' || ($user?.permissions?.chat?.delete_message ?? false)} + {#if siblings.length > 1} + + + + {/if} {/if} {#if isLastMessage} diff --git a/src/lib/components/chat/Messages/UserMessage.svelte b/src/lib/components/chat/Messages/UserMessage.svelte index 19a3d75416..489bef01eb 100644 --- a/src/lib/components/chat/Messages/UserMessage.svelte +++ b/src/lib/components/chat/Messages/UserMessage.svelte @@ -495,32 +495,34 @@ {/if} - {#if !readOnly && (!isFirstMessage || siblings.length > 1)} - - - + + + + + + {/if} {/if} {#if $settings?.chatBubble ?? true}