diff --git a/app/common/src/main/java/stirling/software/common/model/ApplicationProperties.java b/app/common/src/main/java/stirling/software/common/model/ApplicationProperties.java index 72cfef1a0..5256ccb43 100644 --- a/app/common/src/main/java/stirling/software/common/model/ApplicationProperties.java +++ b/app/common/src/main/java/stirling/software/common/model/ApplicationProperties.java @@ -392,6 +392,7 @@ public class ApplicationProperties { private Boolean googlevisibility; private boolean showUpdate; private Boolean showUpdateOnlyAdmin; + private Boolean hideSettingsForNonAdmins; private boolean customHTMLFiles; private String tessdataDir; private Boolean enableAlphaFunctionality; diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ConfigController.java b/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ConfigController.java index 2f8d4b62b..314338017 100644 --- a/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ConfigController.java +++ b/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/ConfigController.java @@ -84,6 +84,9 @@ public class ConfigController { boolean enableLogin = applicationProperties.getSecurity().getEnableLogin() && userService != null; configData.put("enableLogin", enableLogin); + configData.put( + "hideSettingsForNonAdmins", + applicationProperties.getSystem().getHideSettingsForNonAdmins()); // Mail settings - check both SMTP enabled AND invites enabled boolean smtpEnabled = applicationProperties.getMail().isEnabled(); diff --git a/app/core/src/main/resources/settings.yml.template b/app/core/src/main/resources/settings.yml.template index dffebe1bb..360852210 100644 --- a/app/core/src/main/resources/settings.yml.template +++ b/app/core/src/main/resources/settings.yml.template @@ -125,6 +125,7 @@ system: enableAlphaFunctionality: false # set to enable functionality which might need more testing before it fully goes live (this feature might make no changes) showUpdate: false # see when a new update is available showUpdateOnlyAdmin: false # only admins can see when a new update is available, depending on showUpdate it must be set to 'true' + hideSettingsForNonAdmins: false # set to 'true' to hide settings button for non-admins when login is disabled (enableLogin: false) customHTMLFiles: false # enable to have files placed in /customFiles/templates override the existing template HTML files tessdataDir: /usr/share/tessdata # path to the directory containing the Tessdata files. This setting is relevant for Windows systems. For Windows users, this path should be adjusted to point to the appropriate directory where the Tessdata files are stored. enableAnalytics: null # Master toggle for analytics: set to 'true' to enable all analytics, 'false' to disable all analytics, or leave as 'null' to prompt admin on first launch diff --git a/frontend/src/core/components/shared/QuickAccessBar.tsx b/frontend/src/core/components/shared/QuickAccessBar.tsx index 3aba740a8..7a2b23c0f 100644 --- a/frontend/src/core/components/shared/QuickAccessBar.tsx +++ b/frontend/src/core/components/shared/QuickAccessBar.tsx @@ -173,6 +173,13 @@ const QuickAccessBar = forwardRef((_, ref) => { // onClick: () => setActiveButton('activity') //}, + // Determine if settings button should be hidden + // Only hide when login is disabled AND hideSettingsForNonAdmins is true AND user is not admin + const shouldHideSettingsButton = + config?.enableLogin === false && + config?.hideSettingsForNonAdmins === true && + config?.isAdmin !== true; + const bottomButtons: ButtonConfig[] = [ { id: 'help', @@ -185,17 +192,17 @@ const QuickAccessBar = forwardRef((_, ref) => { // This will be overridden by the wrapper logic }, }, - { + ...(shouldHideSettingsButton ? [] : [{ id: 'config', name: t("quickAccess.settings", "Settings"), icon: , - size: 'md', - type: 'modal', + size: 'md' as const, + type: 'modal' as const, onClick: () => { navigate('/settings/overview'); setConfigModalOpen(true); } - } + } as ButtonConfig]) ]; return ( diff --git a/frontend/src/core/contexts/AppConfigContext.tsx b/frontend/src/core/contexts/AppConfigContext.tsx index c8fcdf64c..df9a56713 100644 --- a/frontend/src/core/contexts/AppConfigContext.tsx +++ b/frontend/src/core/contexts/AppConfigContext.tsx @@ -23,6 +23,7 @@ export interface AppConfig { defaultLocale?: string; logoStyle?: 'modern' | 'classic'; enableLogin?: boolean; + hideSettingsForNonAdmins?: boolean; enableEmailInvites?: boolean; isAdmin?: boolean; enableAlphaFunctionality?: boolean;