fix: regenerate menu setting shows while regenerating is not allowed (#32974)

Settings > Interface showed "Regenerate Menu" to users without permission to regenerate responses. Those users have no regenerate button, so the setting did nothing. It now only shows to users who can regenerate, and the settings search skips it for everyone else.

Refs #32830
This commit is contained in:
Classic298 2026-10-24 23:53:01 +02:00 • committed by GitHub
parent 11081b1567
commit c4aac6152b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 29 additions and 23 deletions

View file

@ -1,5 +1,6 @@
<script lang="ts">
import {
canRegenerateResponses,
canUseCalls,
canUseChannels,
canUseTemporaryChats,
@ -1368,32 +1369,34 @@
</p>
</div>
<div>
<div class={settingRowClass}>
<label
id="regenerate-menu-label"
class={settingLabelClass}
for="regenerate-menu-label-control"
>
{$i18n.t('settings.personal.interface.regenerateMenu.label')}
</label>
{#if canRegenerateResponses({ user: $user, config: $config })}
<div>
<div class={settingRowClass}>
<label
id="regenerate-menu-label"
class={settingLabelClass}
for="regenerate-menu-label-control"
>
{$i18n.t('settings.personal.interface.regenerateMenu.label')}
</label>
<div class={settingControlClass}>
<Switch
ariaLabelledbyId="regenerate-menu-label"
tooltip={true}
bind:state={regenerateMenu}
inherited={isDefaultSetting('regenerateMenu')}
on:change={() => {
saveSettings({ regenerateMenu });
}}
/>
<div class={settingControlClass}>
<Switch
ariaLabelledbyId="regenerate-menu-label"
tooltip={true}
bind:state={regenerateMenu}
inherited={isDefaultSetting('regenerateMenu')}
on:change={() => {
saveSettings({ regenerateMenu });
}}
/>
</div>
</div>
<p class={settingDescriptionClass}>
{$i18n.t('settings.personal.interface.regenerateMenu.description')}
</p>
</div>
<p class={settingDescriptionClass}>
{$i18n.t('settings.personal.interface.regenerateMenu.description')}
</p>
</div>
{/if}
<div>
<div class={settingRowClass}>

View file

@ -26,6 +26,8 @@ export const canUseCalls = ({ user }: SettingsAccessContext) =>
export const canUseWebSearch = ({ user, config }: SettingsAccessContext) =>
config?.features?.enable_web_search &&
(user?.role === 'admin' || user?.permissions?.features?.web_search);
export const canRegenerateResponses = ({ user }: SettingsAccessContext) =>
user?.role === 'admin' || (user?.permissions?.chat?.regenerate_response ?? true);
export const isSettingsAdmin = ({ user }: SettingsAccessContext) => user?.role === 'admin';
/** Only permission-gated text needs an explicit rule. Provider/disclosure state is irrelevant. */
@ -84,5 +86,6 @@ export function canSearchSetting(
if (stem === 'settings.personal.shortcuts.newTemporaryChat')
return !!canUseTemporaryChats(context);
if (stem === 'settings.personal.shortcuts.deleteChat') return canManageChats(context, 'delete');
if (stem === 'settings.personal.interface.regenerateMenu') return canRegenerateResponses(context);
return true;
}