From 2378d7700baab66b79cf80aca2b66e1a2044ef4d Mon Sep 17 00:00:00 2001 From: whilstsomebody Date: Thu, 4 Sep 2025 23:32:37 +0530 Subject: [PATCH] user_profile: Disable role dropdown for only owner. This commit adds code to disable the role dropdown when an owner is editing their own profile and they are the only owner in the organization and a tooltip is shown mentioning that. We already keep the role dropdown disabled when an admin user was managing an owner's profile. Fixes #34830. --- web/src/user_profile.ts | 16 +++++++++++++++- web/templates/settings/admin_human_form.hbs | 2 +- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/web/src/user_profile.ts b/web/src/user_profile.ts index 7e656c098a..348969d459 100644 --- a/web/src/user_profile.ts +++ b/web/src/user_profile.ts @@ -1112,6 +1112,20 @@ function toggle_submit_button($edit_form: JQuery): void { $submit_button.prop("disabled", false); } +export function disable_user_role_dropdown_if_needed(user: User): void { + if (user.is_owner && people.is_current_user_only_owner()) { + ui_util.disable_element_and_add_tooltip( + $("#user-role-select"), + "Because you are the only organization owner, you cannot change your role.", + ); + return; + } + + if (user.is_owner && !current_user.is_owner) { + $("#user-role-select").prop("disabled", true); + } +} + export function show_edit_user_info_modal(user_id: number, $container: JQuery): void { const person = people.maybe_get_user_by_id(user_id); const is_active = people.is_person_active(user_id); @@ -1127,7 +1141,6 @@ export function show_edit_user_info_modal(user_id: number, $container: JQuery): email: person.delivery_email, full_name: person.full_name, user_role_values: settings_config.user_role_values, - disable_role_dropdown: person.is_owner && !current_user.is_owner, is_active, hide_deactivate_button, max_user_name_length: people.MAX_USER_NAME_LENGTH, @@ -1143,6 +1156,7 @@ export function show_edit_user_info_modal(user_id: number, $container: JQuery): ) .hide(); } + disable_user_role_dropdown_if_needed(person); const custom_profile_field_form_selector = "#edit-user-form .custom-profile-field-form"; $(custom_profile_field_form_selector).empty(); diff --git a/web/templates/settings/admin_human_form.hbs b/web/templates/settings/admin_human_form.hbs index 27e6f57b5a..11b37c23bc 100644 --- a/web/templates/settings/admin_human_form.hbs +++ b/web/templates/settings/admin_human_form.hbs @@ -20,7 +20,7 @@ - {{> dropdown_options_widget option_values=user_role_values}}