realm owner: Add frontend implementation of owner role.

This commit adds the option of owner role in user role dropdown
and also takes care of the restrictions while adding/removing
owner status of the user.
This commit also handles the places where we dispaly role of
the user in UI.
This commit is contained in:
sahil839
2020-06-04 03:00:34 +05:30
committed by Tim Abbott
parent aa70baba71
commit c7a68d60f3
9 changed files with 46 additions and 5 deletions

View File

@@ -68,6 +68,7 @@ const realm_admin = {
email: 'realm_admin@example.com',
full_name: 'Realm Admin',
user_id: 32,
is_owner: false,
is_admin: true,
is_guest: false,
is_bot: false,
@@ -77,11 +78,22 @@ const guest = {
email: 'guest@example.com',
full_name: 'Guest User',
user_id: 33,
is_owner: false,
is_admin: false,
is_guest: true,
is_bot: false,
};
const realm_owner = {
email: 'realm_owner@example.com',
full_name: 'Realm Owner',
user_id: 34,
is_owner: true,
is_admin: true,
is_guest: false,
is_bot: false,
};
const bot_botson = {
email: 'botson-bot@example.com',
user_id: 35,
@@ -402,10 +414,12 @@ run_test('user_type', () => {
people.add_active_user(me);
people.add_active_user(realm_admin);
people.add_active_user(guest);
people.add_active_user(realm_owner);
people.add_active_user(bot_botson);
assert.equal(people.get_user_type(me.user_id), i18n.t('Member'));
assert.equal(people.get_user_type(realm_admin.user_id), i18n.t('Administrator'));
assert.equal(people.get_user_type(guest.user_id), i18n.t('Guest'));
assert.equal(people.get_user_type(realm_owner.user_id), i18n.t('Owner'));
assert.equal(people.get_user_type(bot_botson.user_id), i18n.t('Bot'));
});

View File

@@ -91,6 +91,11 @@ run_test('updates', () => {
assert.equal(person.full_name, 'Isaac Newton');
assert.equal(person.is_admin, true);
user_events.update_person({user_id: isaac.user_id,
role: settings_config.user_role_values.owner.code});
assert.equal(person.is_admin, true);
assert.equal(person.is_owner, true);
let user_id;
let full_name;
global.message_live_update.update_user_full_name = function (user_id_arg, full_name_arg) {

View File

@@ -60,6 +60,7 @@ exports.build_page = function () {
realm_signup_notifications_stream_id: page_params.realm_signup_notifications_stream_id,
is_admin: page_params.is_admin,
is_guest: page_params.is_guest,
is_owner: page_params.is_owner,
realm_icon_source: page_params.realm_icon_source,
realm_icon_url: page_params.realm_icon_url,
realm_logo_source: page_params.realm_logo_source,

View File

@@ -243,7 +243,9 @@ exports.get_user_time = function (user_id) {
exports.get_user_type = function (user_id) {
const user_profile = exports.get_by_user_id(user_id);
if (user_profile.is_admin) {
if (user_profile.is_owner) {
return i18n.t("Owner");
} else if (user_profile.is_admin) {
return i18n.t("Administrator");
} else if (user_profile.is_guest) {
return i18n.t("Guest");

View File

@@ -171,6 +171,10 @@ exports.user_role_values = {
code: 200,
description: i18n.t("Administrator"),
},
owner: {
code: 100,
description: i18n.t("Owner"),
},
};
// NOTIFICATIONS

View File

@@ -69,7 +69,9 @@ function get_user_info_row(user_id) {
function set_user_role_dropdown(person) {
let role_value = settings_config.user_role_values.member.code;
if (person.is_admin) {
if (person.is_owner) {
role_value = settings_config.user_role_values.owner.code;
} else if (person.is_admin) {
role_value = settings_config.user_role_values.admin.code;
} else if (person.is_guest) {
role_value = settings_config.user_role_values.guest.code;
@@ -218,6 +220,7 @@ function human_info(person) {
info.is_bot = false;
info.is_admin = person.is_admin;
info.is_guest = person.is_guest;
info.is_owner = person.is_owner;
info.is_active = people.is_person_active(person.user_id);
info.user_id = person.user_id;
info.full_name = person.full_name;
@@ -378,12 +381,16 @@ function open_human_form(person) {
email: person.email,
full_name: person.full_name,
user_role_values: settings_config.user_role_values,
disable_role_dropdown: person.is_owner && !page_params.is_owner,
});
const div = $(html);
const modal_container = $('#user-info-form-modal-container');
modal_container.empty().append(div);
overlays.open_modal('#admin-human-form');
set_user_role_dropdown(person);
if (!page_params.is_owner) {
$('#user-role-select').find('option[value=' + settings_config.user_role_values.owner.code + ']').hide();
}
const element = "#admin-human-form .custom-profile-field-form";
$(element).html("");

View File

@@ -48,10 +48,16 @@ exports.update_person = function update(person) {
}
if (Object.prototype.hasOwnProperty.call(person, 'role')) {
person_obj.is_admin = person.role === settings_config.user_role_values.admin.code;
person_obj.is_owner = person.role === settings_config.user_role_values.owner.code;
person_obj.is_admin = person.role === settings_config.user_role_values.admin.code
|| person_obj.is_owner;
person_obj.is_guest = person.role === settings_config.user_role_values.guest.code;
settings_users.update_user_data(person.user_id, person);
if (people.is_my_user_id(person.user_id) && page_params.is_owner !== person_obj.is_owner) {
page_params.is_owner = person_obj.is_owner;
}
if (people.is_my_user_id(person.user_id) && page_params.is_admin !== person_obj.is_admin) {
page_params.is_admin = person_obj.is_admin;
gear_menu.update_org_settings_menu_item();

View File

@@ -17,7 +17,7 @@
</div>
<div class="input-group">
<label class="input-label" for="user-role-select">{{t 'User role' }}</label>
<select name="user-role-select" id="user-role-select" data-setting-widget-type="number">
<select name="user-role-select" id="user-role-select" data-setting-widget-type="number" {{#if disable_role_dropdown}}disabled{{/if}}>
{{> settings/dropdown_options_widget option_values=user_role_values}}
</select>
</div>

View File

@@ -11,7 +11,9 @@
{{#unless is_bot}}
<td>
<span class="user_role">
{{#if is_admin}}
{{#if is_owner}}
{{t "Owner" }}
{{else if is_admin}}
{{t "Administrator" }}
{{else if is_guest}}
{{t "Guest" }}