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.
This commit is contained in:
whilstsomebody
2025-09-04 23:32:37 +05:30
committed by Tim Abbott
parent e10f1ef260
commit 2378d7700b
2 changed files with 16 additions and 2 deletions

View File

@@ -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();

View File

@@ -20,7 +20,7 @@
<label for="user-role-select" class="modal-field-label">{{t 'User role' }}
{{> ../help_link_widget link="/help/user-roles" }}
</label>
<select name="user-role-select" class="bootstrap-focus-style modal_select" id="user-role-select" data-setting-widget-type="number" {{#if disable_role_dropdown}}disabled{{/if}}>
<select name="user-role-select" class="bootstrap-focus-style modal_select" id="user-role-select" data-setting-widget-type="number">
{{> dropdown_options_widget option_values=user_role_values}}
</select>
</div>