settings: Add moderators and full members options in user-group setting.

This commit adds moderators and full members options for user group
settings in frontend.
This commit is contained in:
sahil839
2021-06-03 19:17:03 +05:30
committed by Tim Abbott
parent 50240ca71b
commit e736d9d275
9 changed files with 34 additions and 48 deletions

View File

@@ -181,6 +181,11 @@ test_policy(
"realm_move_messages_between_streams_policy",
settings_data.user_can_move_messages_between_streams,
);
test_policy(
"user_can_edit_user_groups",
"realm_user_group_edit_policy",
settings_data.user_can_edit_user_groups,
);
function test_message_policy(label, policy, validation_func) {
run_test(label, () => {

View File

@@ -32,6 +32,7 @@ const ui_report = mock_esm("../../static/js/ui_report");
const people = zrequire("people");
const settings_config = zrequire("settings_config");
const settings_data = zrequire("settings_data");
const settings_user_groups = zrequire("settings_user_groups");
const user_pill = zrequire("user_pill");
@@ -51,16 +52,10 @@ function test_ui(label, f) {
}
test_ui("can_edit", () => {
page_params.is_guest = false;
page_params.is_admin = true;
assert.ok(settings_user_groups.can_edit(1));
page_params.is_admin = false;
page_params.is_guest = true;
settings_data.user_can_edit_user_groups = () => false;
assert.ok(!settings_user_groups.can_edit(1));
page_params.is_guest = false;
page_params.is_admin = false;
settings_data.user_can_edit_user_groups = () => true;
user_groups.is_member_of = (group_id, user_id) => {
assert.equal(group_id, 1);
assert.equal(user_id, undefined);
@@ -68,20 +63,15 @@ test_ui("can_edit", () => {
};
assert.ok(!settings_user_groups.can_edit(1));
page_params.realm_user_group_edit_policy = 2;
page_params.is_admin = true;
assert.ok(settings_user_groups.can_edit(1));
page_params.is_admin = false;
user_groups.is_member_of = (group_id, user_id) => {
assert.equal(group_id, 1);
assert.equal(user_id, undefined);
return true;
};
assert.ok(!settings_user_groups.can_edit(1));
page_params.is_moderator = true;
assert.ok(settings_user_groups.can_edit(1));
page_params.realm_user_group_edit_policy = 1;
page_params.is_admin = false;
page_params.is_moderator = false;
user_groups.is_member_of = (group_id, user_id) => {
assert.equal(group_id, 1);
assert.equal(user_id, undefined);

View File

@@ -73,7 +73,6 @@ export function build_page() {
realm_default_twenty_four_hour_time_values: settings_config.twenty_four_hour_time_values,
realm_authentication_methods: page_params.realm_authentication_methods,
realm_user_group_edit_policy: page_params.realm_user_group_edit_policy,
USER_GROUP_EDIT_POLICY_MEMBERS: 1,
realm_name_changes_disabled: page_params.realm_name_changes_disabled,
realm_email_changes_disabled: page_params.realm_email_changes_disabled,
realm_avatar_changes_disabled: page_params.realm_avatar_changes_disabled,
@@ -122,6 +121,8 @@ export function build_page() {
email_address_visibility_values: settings_config.email_address_visibility_values,
can_invite_others_to_realm: settings_data.user_can_invite_others_to_realm(),
realm_invite_required: page_params.realm_invite_required,
can_edit_user_groups: settings_data.user_can_edit_user_groups(),
policy_values: settings_config.common_policy_values,
...settings_org.get_organization_settings_options(),
};

View File

@@ -130,19 +130,6 @@ export const common_policy_values = {
},
};
export const user_group_edit_policy_values = {
by_admins_only: {
order: 1,
code: 2,
description: $t({defaultMessage: "Admins"}),
},
by_members: {
order: 2,
code: 1,
description: $t({defaultMessage: "Admins and members"}),
},
};
export const private_message_policy_values = {
by_anyone: {
order: 1,

View File

@@ -149,6 +149,10 @@ export function user_can_move_messages_between_streams() {
return user_has_permission(page_params.realm_move_messages_between_streams_policy);
}
export function user_can_edit_user_groups() {
return user_has_permission(page_params.realm_user_group_edit_policy);
}
export function user_can_edit_topic_of_any_message() {
if (
page_params.realm_edit_topic_policy ===

View File

@@ -95,9 +95,6 @@ export function get_sorted_options_list(option_values_object) {
export function get_organization_settings_options() {
const options = {};
options.common_policy_values = get_sorted_options_list(settings_config.common_policy_values);
options.user_group_edit_policy_values = get_sorted_options_list(
settings_config.user_group_edit_policy_values,
);
options.private_message_policy_values = get_sorted_options_list(
settings_config.private_message_policy_values,
);

View File

@@ -10,6 +10,7 @@ import {$t, $t_html} from "./i18n";
import {page_params} from "./page_params";
import * as people from "./people";
import * as pill_typeahead from "./pill_typeahead";
import * as settings_data from "./settings_data";
import * as ui_report from "./ui_report";
import * as user_groups from "./user_groups";
import * as user_pill from "./user_pill";
@@ -32,21 +33,18 @@ export function reload() {
populate_user_groups();
}
const USER_GROUP_EDIT_POLICY_MEMBERS = 1;
export function can_edit(group_id) {
if (page_params.is_admin) {
if (!settings_data.user_can_edit_user_groups()) {
return false;
}
// Admins and moderators are allowed to edit user groups even if they
// are not a member of that user group. Members can edit user groups
// only if they belong to that group.
if (page_params.is_admin || page_params.is_moderator) {
return true;
}
if (page_params.is_guest) {
return false;
}
if (page_params.realm_user_group_edit_policy !== USER_GROUP_EDIT_POLICY_MEMBERS) {
return false;
}
return user_groups.is_member_of(group_id, people.my_current_user_id());
}

View File

@@ -205,7 +205,7 @@
<div class="input-group">
<label for="realm_user_group_edit_policy" class="dropdown-title">{{t "Who can create and manage user groups" }}</label>
<select name="realm_user_group_edit_policy" id="id_realm_user_group_edit_policy" class="prop-element" data-setting-widget-type="number">
{{> dropdown_options_widget option_values=user_group_edit_policy_values}}
{{> dropdown_options_widget option_values=common_policy_values}}
</select>
</div>

View File

@@ -1,6 +1,10 @@
<div id="user-groups-admin" class="settings-section" data-name="user-groups-admin">
{{#if (eq realm_user_group_edit_policy USER_GROUP_EDIT_POLICY_MEMBERS) }}
<div class="tip">{{t 'Only group members and organization administrators can modify a group.' }}</div>
{{#if (eq realm_user_group_edit_policy policy_values.by_members.code) }}
<div class="tip">{{t 'Only group members, organization administrators and moderators can modify a group.' }}</div>
{{else if (eq realm_user_group_edit_policy policy_values.by_full_members.code) }}
<div class="tip">{{t 'Only full members belonging to the group, organization administrators and moderators can modify a group.' }}</div>
{{else if (eq realm_user_group_edit_policy policy_values.by_moderators_only.code) }}
<div class="tip">{{t 'Only organization administrators and moderators can modify user groups in this organization.' }}</div>
{{else}}
<div class="tip">{{t 'Only organization administrators can modify user groups in this organization.' }}</div>
{{/if}}
@@ -12,7 +16,7 @@
{{#*inline "z-link"}}<a href="/help/mention-a-user-or-group" target="_blank" rel="noopener noreferrer">{{> @partial-block}}</a>{{/inline}}
{{/tr}}
</p>
{{#if (or is_admin (eq realm_user_group_edit_policy USER_GROUP_EDIT_POLICY_MEMBERS))}}
{{#if can_edit_user_groups}}
<form class="form-horizontal admin-user-group-form">
<div class="add-new-user-group-box grey-box">
<div class="new-user-group-form">