diff --git a/web/src/views/SettingsView.dom.test.tsx b/web/src/views/SettingsView.dom.test.tsx
index 923c33a..b449406 100644
--- a/web/src/views/SettingsView.dom.test.tsx
+++ b/web/src/views/SettingsView.dom.test.tsx
@@ -60,4 +60,16 @@ describe('SettingsView legacy surface contrast', () => {
await user.click(screen.getByRole('button', { name: 'Admin Panel' }));
expect(screen.getByText('Admin panel content')).toBeInTheDocument();
});
+
+ it('hides admin-only sections for non-admin users', () => {
+ render(
+
+
+ ,
+ );
+
+ expect(screen.getByRole('button', { name: 'Account' })).toBeInTheDocument();
+ expect(screen.queryByRole('button', { name: 'Bot Config' })).not.toBeInTheDocument();
+ expect(screen.queryByRole('button', { name: 'Admin Panel' })).not.toBeInTheDocument();
+ });
});
diff --git a/web/src/views/SettingsView.tsx b/web/src/views/SettingsView.tsx
index ef6e500..f524077 100644
--- a/web/src/views/SettingsView.tsx
+++ b/web/src/views/SettingsView.tsx
@@ -10,7 +10,7 @@ export function SettingsView() {
const { botState, isAdmin, socket } = useAppContext();
const sections: SettingsSection[] = [
'Account',
- 'Bot Config',
+ ...(isAdmin ? ['Bot Config' as SettingsSection] : []),
...(isAdmin ? ['Admin Panel' as SettingsSection] : []),
];
const [section, setSection] = useState
('Account');
@@ -57,7 +57,7 @@ export function SettingsView() {
}}
>
{section === 'Account' && }
- {section === 'Bot Config' && }
+ {section === 'Bot Config' && isAdmin && }
{section === 'Admin Panel' && isAdmin && }