diff --git a/app/assets/javascripts/admin/addon/controllers/admin.js b/app/assets/javascripts/admin/addon/controllers/admin.js
index bb82a5c136d..8b9e280aeb0 100644
--- a/app/assets/javascripts/admin/addon/controllers/admin.js
+++ b/app/assets/javascripts/admin/addon/controllers/admin.js
@@ -1,13 +1,19 @@
import Controller from "@ember/controller";
-import { readOnly } from "@ember/object/computed";
import { inject as service } from "@ember/service";
import { dasherize } from "@ember/string";
import discourseComputed from "discourse-common/utils/decorators";
export default class AdminController extends Controller {
@service router;
+ @service currentUser;
- @readOnly("siteSettings.enable_admin_sidebar_navigation") showAdminSidebar;
+ @discourseComputed("siteSettings.admin_sidebar_enabled_groups")
+ showAdminSidebar() {
+ return this.siteSettings.userInAnyGroups(
+ "admin_sidebar_enabled_groups",
+ this.currentUser
+ );
+ }
@discourseComputed("siteSettings.enable_group_directory")
showGroups(enableGroupDirectory) {
diff --git a/app/assets/javascripts/admin/addon/routes/admin-revamp.js b/app/assets/javascripts/admin/addon/routes/admin-revamp.js
index c24449cef4d..8c94766e881 100644
--- a/app/assets/javascripts/admin/addon/routes/admin-revamp.js
+++ b/app/assets/javascripts/admin/addon/routes/admin-revamp.js
@@ -14,7 +14,12 @@ export default class AdminRoute extends DiscourseRoute {
}
activate() {
- if (!this.siteSettings.enable_admin_sidebar_navigation) {
+ if (
+ !this.siteSettings.userInAnyGroups(
+ "admin_sidebar_enabled_groups",
+ this.currentUser
+ )
+ ) {
return DiscourseURL.redirectTo("/admin");
}
diff --git a/app/assets/javascripts/admin/addon/routes/admin.js b/app/assets/javascripts/admin/addon/routes/admin.js
index f824af8de8c..306872c4aa6 100644
--- a/app/assets/javascripts/admin/addon/routes/admin.js
+++ b/app/assets/javascripts/admin/addon/routes/admin.js
@@ -6,13 +6,19 @@ import I18n from "discourse-i18n";
export default class AdminRoute extends DiscourseRoute {
@service sidebarState;
@service siteSettings;
+ @service currentUser;
titleToken() {
return I18n.t("admin_title");
}
activate() {
- if (this.siteSettings.enable_admin_sidebar_navigation) {
+ if (
+ this.siteSettings.userInAnyGroups(
+ "admin_sidebar_enabled_groups",
+ this.currentUser
+ )
+ ) {
this.sidebarState.setPanel(ADMIN_PANEL);
this.sidebarState.setSeparatedMode();
this.sidebarState.hideSwitchPanelButtons();
@@ -26,7 +32,12 @@ export default class AdminRoute extends DiscourseRoute {
deactivate(transition) {
this.controllerFor("application").set("showTop", true);
- if (this.siteSettings.enable_admin_sidebar_navigation) {
+ if (
+ this.siteSettings.userInAnyGroups(
+ "admin_sidebar_enabled_groups",
+ this.currentUser
+ )
+ ) {
if (!transition?.to.name.startsWith("admin")) {
this.sidebarState.setPanel(MAIN_PANEL);
}
diff --git a/app/assets/javascripts/discourse/app/instance-initializers/admin-sidebar.js b/app/assets/javascripts/discourse/app/instance-initializers/admin-sidebar.js
index 4d2fb70cbf2..ae8dac2899a 100644
--- a/app/assets/javascripts/discourse/app/instance-initializers/admin-sidebar.js
+++ b/app/assets/javascripts/discourse/app/instance-initializers/admin-sidebar.js
@@ -181,7 +181,12 @@ export default {
return;
}
- if (!this.siteSettings.enable_admin_sidebar_navigation) {
+ if (
+ !this.siteSettings.userInAnyGroups(
+ "admin_sidebar_enabled_groups",
+ this.currentUser
+ )
+ ) {
return;
}
diff --git a/app/assets/javascripts/discourse/app/lib/sidebar/user/community-section/admin-revamp-section-link.js b/app/assets/javascripts/discourse/app/lib/sidebar/user/community-section/admin-revamp-section-link.js
index fa28d36f10a..575206d54b3 100644
--- a/app/assets/javascripts/discourse/app/lib/sidebar/user/community-section/admin-revamp-section-link.js
+++ b/app/assets/javascripts/discourse/app/lib/sidebar/user/community-section/admin-revamp-section-link.js
@@ -31,7 +31,10 @@ export default class AdminRevampSectionLink extends BaseSectionLink {
return (
this.currentUser.staff &&
- this.siteSettings.enable_admin_sidebar_navigation
+ this.siteSettings.userInAnyGroups(
+ "admin_sidebar_enabled_groups",
+ this.currentUser
+ )
);
}
diff --git a/config/locales/server.de.yml b/config/locales/server.de.yml
index 9107343cbe8..f0ba9100165 100644
--- a/config/locales/server.de.yml
+++ b/config/locales/server.de.yml
@@ -2237,7 +2237,6 @@ de:
experimental_search_menu_groups: "EXPERIMENTELL: Das neue Suchmenü aktivieren, das für die Verwendung von Glimmer aktualisiert wurde"
enable_experimental_lightbox: "EXPERIMENTELL: Die Standard-Bild-Lightbox durch das überarbeitete Design ersetzen."
experimental_form_templates: "EXPERIMENTELL: Aktiviere die Funktion der Formularvorlagen. Nachdem du sie aktiviert hast, verwalte die Vorlagen unter Anpassen / Vorlagen."
- enable_admin_sidebar_navigation: "EXPERIMENTELL: Aktiviere die Seitenleisten-Navigation für die Admin-Benutzeroberfläche, die die Admin-Navigationsschaltflächen auf oberster Ebene ersetzt."
page_loading_indicator: "Die Ladeanzeige konfigurieren, die bei der Seitennavigation in Discourse erscheint. „Spinner“ ist ein ganzseitiger Indikator. „Slider“ zeigt einen schmalen Balken am oberen Rand des Bildschirms an."
show_user_menu_avatars: "Benutzeravatare im Benutzermenü anzeigen"
errors:
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index 45d86d0c1e5..cc535970b28 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -2499,7 +2499,7 @@ en:
enable_experimental_lightbox: "EXPERIMENTAL: Replace the default image lightbox with the revamped design."
experimental_form_templates: "EXPERIMENTAL: Enable the form templates feature. After enabled, manage the templates at Customize / Templates."
- enable_admin_sidebar_navigation: "EXPERIMENTAL: Enable sidebar navigation for the admin UI, which replaces the top-level admin navigation buttons."
+ admin_sidebar_enabled_groups: "EXPERIMENTAL: Enable sidebar navigation for the admin UI for the specified groups, which replaces the top-level admin navigation buttons."
page_loading_indicator: "Configure the loading indicator which appears during page navigations within Discourse. 'Spinner' is a full page indicator. 'Slider' shows a narrow bar at the top of the screen."
show_user_menu_avatars: "Show user avatars in the user menu"
diff --git a/config/locales/server.it.yml b/config/locales/server.it.yml
index 116e947cceb..5f6318b7082 100644
--- a/config/locales/server.it.yml
+++ b/config/locales/server.it.yml
@@ -2181,7 +2181,6 @@ it:
experimental_search_menu_groups: "SPERIMENTALE: attiva il nuovo menu di ricerca che è stato aggiornato per utilizzare glimmer."
enable_experimental_lightbox: "SPERIMENTALE: sostituisci la lightbox dell'immagine predefinita con il design rinnovato."
experimental_form_templates: "SPERIMENTALE: abilita la funzionalità dei modelli di modulo. Dopo l'abilitazione, gestisci i modelli in Personalizza / Modelli."
- enable_admin_sidebar_navigation: "SPERIMENTALE: abilita la navigazione della barra laterale per l'interfaccia di amministrazione, che sostituisce i pulsanti di navigazione dell'amministratore di livello superiore."
page_loading_indicator: "Configura l'indicatore di caricamento che appare durante la navigazione delle pagine all'interno di Discourse. 'Spinner' come un indicatore a pagina intera. 'Slider' mostra una barra stretta nella parte superiore dello schermo."
errors:
invalid_css_color: "Colore non valido. Immettere un nome o un valore esadecimale per il colore."
diff --git a/config/locales/server.pl_PL.yml b/config/locales/server.pl_PL.yml
index 741aa4dfde8..e327da1fb53 100644
--- a/config/locales/server.pl_PL.yml
+++ b/config/locales/server.pl_PL.yml
@@ -2330,7 +2330,6 @@ pl_PL:
experimental_search_menu_groups: "EKSPERYMENTALNE: Włącza nowe menu wyszukiwania, które zostało ulepszone tak, by korzystało z glimmer"
enable_experimental_lightbox: "EKSPERYMENTALNIE: Zastąp domyślny lightbox obrazu odświeżonym projektem."
experimental_form_templates: "EKSPERYMENTALNIE: Włącz funkcję szablonów formularzy. Po włączeniu zarządzaj szablonami w Dostosuj / Szablony."
- enable_admin_sidebar_navigation: "EKSPERYMENTALNE: Włącz nawigację na pasku bocznym interfejsu administratora, która zastępuje przyciski nawigacyjne administratora najwyższego poziomu."
page_loading_indicator: "Skonfiguruj wskaźnik ładowania, który pojawia się podczas nawigacji po stronie w Discourse. \"Spinner\" to wskaźnik na pełnym ekranie. \"Slider\" wyświetla wąski pasek u góry ekranu."
show_user_menu_avatars: "Pokaż awatary użytkowników w menu użytkownika"
errors:
diff --git a/config/locales/server.ro.yml b/config/locales/server.ro.yml
index da3145b677b..5735a02cbbe 100644
--- a/config/locales/server.ro.yml
+++ b/config/locales/server.ro.yml
@@ -1144,7 +1144,6 @@ ro:
min_trust_level_to_tag_topics: "Nivelul minim de încredere necesar pentru a pune etichete pe subiecte."
suppress_overlapping_tags_in_list: "Dacă etichetele corespund exact cu cuvintele din titlul subiectelor, nu mai afișa aceste etichete."
shared_drafts_allowed_groups: "Permit utilizatorilor din aceste grupuri să vadă și să editeze ciorne comune."
- enable_admin_sidebar_navigation: "EXPERIMENTAL: Activează navigarea în bara laterală pentru interfața de administrare care înlocuiește butoanele de navigare de la nivelul superior al administratorului."
show_user_menu_avatars: "Arată avatare utilizator în meniul utilizatorului"
errors:
invalid_email: "Adresă de email invalidă."
diff --git a/config/locales/server.uk.yml b/config/locales/server.uk.yml
index 1730cd5dafb..4c5956141c8 100644
--- a/config/locales/server.uk.yml
+++ b/config/locales/server.uk.yml
@@ -2344,7 +2344,6 @@ uk:
experimental_search_menu_groups: "ЕКСПЕРИМЕНТАЛЬНЕ: Вмикає нове меню пошуку, в якому використовується мерехтіння"
enable_experimental_lightbox: "ЕКСПЕРИМЕНТАЛЬНЕ: оновлений дизайн стандартного лайтбоксу зображень."
experimental_form_templates: "ЕКСПЕРИМЕНТАЛЬНО: Увімкніть функцію шаблонів форм. Після увімкнення керуйте шаблонами за адресою Налаштування/Шаблони."
- enable_admin_sidebar_navigation: "ЕКСПЕРИМЕНТАЛЬНО: Увімкніть бічну панель навігації для інтерфейсу адміністратора, яка замінить кнопки навігації адміністратора верхнього рівня."
page_loading_indicator: "Вибір індикатора завантаження, який з’являється під час навігації сторінкою в Discourse. «Спіннер» – це індикатор на всю сторінку. «Слайдер» — вузька смужка у верхній частині екрана."
show_user_menu_avatars: "Показувати аватари користувачів у меню користувача"
errors:
diff --git a/config/site_settings.yml b/config/site_settings.yml
index 5a12b0d8575..1c24de4dc28 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -2302,9 +2302,13 @@ developer:
refresh: true
hidden: true
client: true
- enable_admin_sidebar_navigation:
- default: false
+ admin_sidebar_enabled_groups:
client: true
+ type: group_list
+ list_type: compact
+ default: ""
+ allow_any: false
+ refresh: true
lazy_load_categories:
default: false
client: true
diff --git a/db/post_migrate/20240108022138_change_enable_admin_sidebar_to_group_post_migration.rb b/db/post_migrate/20240108022138_change_enable_admin_sidebar_to_group_post_migration.rb
new file mode 100644
index 00000000000..ffe705b310e
--- /dev/null
+++ b/db/post_migrate/20240108022138_change_enable_admin_sidebar_to_group_post_migration.rb
@@ -0,0 +1,22 @@
+# frozen_string_literal: true
+
+class ChangeEnableAdminSidebarToGroupPostMigration < ActiveRecord::Migration[7.0]
+ def change
+ enable_admin_sidebar_navigation_raw =
+ DB.query_single(
+ "SELECT value FROM site_settings WHERE name = 'enable_admin_sidebar_navigation'",
+ ).first
+
+ if enable_admin_sidebar_navigation_raw.present?
+ DB.exec(
+ "INSERT INTO site_settings(name, value, data_type, created_at, updated_at)
+ VALUES('admin_sidebar_enabled_groups', :setting, '20', NOW(), NOW())",
+ setting: "1", # 1 is the Group::AUTO_GROUPS[:admins] group id
+ )
+ end
+ end
+
+ def down
+ raise ActiveRecord::IrreversibleMigration
+ end
+end
diff --git a/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb b/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb
index 55ee42cbe81..e79f6e955e9 100644
--- a/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb
+++ b/plugins/chat/spec/system/admin_sidebar_navigation_spec.rb
@@ -6,7 +6,7 @@ describe "Admin Revamp | Sidebar Navigation | Plugin Links", type: :system do
before do
chat_system_bootstrap
- SiteSetting.enable_admin_sidebar_navigation = true
+ SiteSetting.admin_sidebar_enabled_groups = Group::AUTO_GROUPS[:admins]
sign_in(admin)
end
diff --git a/spec/system/admin_revamp_sidebar_navigation_spec.rb b/spec/system/admin_revamp_sidebar_navigation_spec.rb
index 6a235c3c673..2aa85ef9c89 100644
--- a/spec/system/admin_revamp_sidebar_navigation_spec.rb
+++ b/spec/system/admin_revamp_sidebar_navigation_spec.rb
@@ -5,7 +5,7 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do
let(:sidebar) { PageObjects::Components::NavigationMenu::Sidebar.new }
before do
- SiteSetting.enable_admin_sidebar_navigation = true
+ SiteSetting.admin_sidebar_enabled_groups = Group::AUTO_GROUPS[:admins]
sign_in(admin)
end
@@ -21,7 +21,7 @@ describe "Admin Revamp | Sidebar Navigation", type: :system do
end
context "when the setting is disabled" do
- before { SiteSetting.enable_admin_sidebar_navigation = false }
+ before { SiteSetting.admin_sidebar_enabled_groups = "" }
it "does not show the admin sidebar" do
visit("/latest")