Hide Settings tab when authentication is not configured

Related to #636

When authentication is not configured (hasAuth() returns false), the
Settings tab is now automatically hidden from the web interface. This
provides a cleaner monitoring-only view for unauthenticated deployments
where users only need to check the health of their environment.

The Settings icon beside the Alerts tab will only appear when
authentication is properly configured via PULSE_AUTH_USER/PASS,
API tokens, proxy auth, or OIDC.

Changes:
- Modified utilityTabs in App.tsx to conditionally include Settings
  based on hasAuth() signal
- Updated CONFIGURATION.md to document this UI behavior
This commit is contained in:
rcourtman
2025-11-05 23:10:20 +00:00
parent 8ca31003a0
commit 3d1c910daa
2 changed files with 11 additions and 4 deletions

View File

@@ -63,6 +63,7 @@ PROXY_AUTH_LOGOUT_URL=/logout # URL for SSO logout
- **DO NOT** put port configuration here - use system.json or systemd overrides
- Copy `.env.example` from the repository for a ready-to-edit template
- Locked out? Create `<data-path>/.auth_recovery`, restart Pulse, and sign in from localhost to reset credentials. Remove the file afterwards.
- **UI Behavior:** When authentication is not configured, the Settings tab is automatically hidden from the web interface, providing a cleaner monitoring-only view for unauthenticated deployments.
---

View File

@@ -897,7 +897,7 @@ function AppLayout(props: {
{ warning: 0, critical: 0 },
);
const activeAlertCount = breakdown.warning + breakdown.critical;
return [
const tabs = [
{
id: 'alerts' as const,
label: 'Alerts',
@@ -908,7 +908,11 @@ function AppLayout(props: {
breakdown,
icon: <BellIcon class="w-4 h-4 shrink-0" />,
},
{
];
// Only show Settings tab when authentication is configured
if (hasAuth()) {
tabs.push({
id: 'settings' as const,
label: 'Settings',
route: '/settings',
@@ -917,8 +921,10 @@ function AppLayout(props: {
count: undefined,
breakdown: undefined,
icon: <SettingsIcon class="w-4 h-4 shrink-0" />,
},
];
});
}
return tabs;
});
const handlePlatformClick = (platform: ReturnType<typeof platformTabs>[number]) => {