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", "realm_move_messages_between_streams_policy",
settings_data.user_can_move_messages_between_streams, 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) { function test_message_policy(label, policy, validation_func) {
run_test(label, () => { run_test(label, () => {

View File

@@ -32,6 +32,7 @@ const ui_report = mock_esm("../../static/js/ui_report");
const people = zrequire("people"); const people = zrequire("people");
const settings_config = zrequire("settings_config"); const settings_config = zrequire("settings_config");
const settings_data = zrequire("settings_data");
const settings_user_groups = zrequire("settings_user_groups"); const settings_user_groups = zrequire("settings_user_groups");
const user_pill = zrequire("user_pill"); const user_pill = zrequire("user_pill");
@@ -51,16 +52,10 @@ function test_ui(label, f) {
} }
test_ui("can_edit", () => { test_ui("can_edit", () => {
page_params.is_guest = false; settings_data.user_can_edit_user_groups = () => false;
page_params.is_admin = true;
assert.ok(settings_user_groups.can_edit(1));
page_params.is_admin = false;
page_params.is_guest = true;
assert.ok(!settings_user_groups.can_edit(1)); assert.ok(!settings_user_groups.can_edit(1));
page_params.is_guest = false; settings_data.user_can_edit_user_groups = () => true;
page_params.is_admin = false;
user_groups.is_member_of = (group_id, user_id) => { user_groups.is_member_of = (group_id, user_id) => {
assert.equal(group_id, 1); assert.equal(group_id, 1);
assert.equal(user_id, undefined); assert.equal(user_id, undefined);
@@ -68,20 +63,15 @@ test_ui("can_edit", () => {
}; };
assert.ok(!settings_user_groups.can_edit(1)); assert.ok(!settings_user_groups.can_edit(1));
page_params.realm_user_group_edit_policy = 2;
page_params.is_admin = true; page_params.is_admin = true;
assert.ok(settings_user_groups.can_edit(1)); assert.ok(settings_user_groups.can_edit(1));
page_params.is_admin = false; page_params.is_admin = false;
user_groups.is_member_of = (group_id, user_id) => { page_params.is_moderator = true;
assert.equal(group_id, 1); assert.ok(settings_user_groups.can_edit(1));
assert.equal(user_id, undefined);
return 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_admin = false;
page_params.is_moderator = false;
user_groups.is_member_of = (group_id, user_id) => { user_groups.is_member_of = (group_id, user_id) => {
assert.equal(group_id, 1); assert.equal(group_id, 1);
assert.equal(user_id, undefined); 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_default_twenty_four_hour_time_values: settings_config.twenty_four_hour_time_values,
realm_authentication_methods: page_params.realm_authentication_methods, realm_authentication_methods: page_params.realm_authentication_methods,
realm_user_group_edit_policy: page_params.realm_user_group_edit_policy, 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_name_changes_disabled: page_params.realm_name_changes_disabled,
realm_email_changes_disabled: page_params.realm_email_changes_disabled, realm_email_changes_disabled: page_params.realm_email_changes_disabled,
realm_avatar_changes_disabled: page_params.realm_avatar_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, email_address_visibility_values: settings_config.email_address_visibility_values,
can_invite_others_to_realm: settings_data.user_can_invite_others_to_realm(), can_invite_others_to_realm: settings_data.user_can_invite_others_to_realm(),
realm_invite_required: page_params.realm_invite_required, 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(), ...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 = { export const private_message_policy_values = {
by_anyone: { by_anyone: {
order: 1, 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); 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() { export function user_can_edit_topic_of_any_message() {
if ( if (
page_params.realm_edit_topic_policy === 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() { export function get_organization_settings_options() {
const options = {}; const options = {};
options.common_policy_values = get_sorted_options_list(settings_config.common_policy_values); 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( options.private_message_policy_values = get_sorted_options_list(
settings_config.private_message_policy_values, 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 {page_params} from "./page_params";
import * as people from "./people"; import * as people from "./people";
import * as pill_typeahead from "./pill_typeahead"; import * as pill_typeahead from "./pill_typeahead";
import * as settings_data from "./settings_data";
import * as ui_report from "./ui_report"; import * as ui_report from "./ui_report";
import * as user_groups from "./user_groups"; import * as user_groups from "./user_groups";
import * as user_pill from "./user_pill"; import * as user_pill from "./user_pill";
@@ -32,21 +33,18 @@ export function reload() {
populate_user_groups(); populate_user_groups();
} }
const USER_GROUP_EDIT_POLICY_MEMBERS = 1;
export function can_edit(group_id) { 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; 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()); return user_groups.is_member_of(group_id, people.my_current_user_id());
} }

View File

@@ -205,7 +205,7 @@
<div class="input-group"> <div class="input-group">
<label for="realm_user_group_edit_policy" class="dropdown-title">{{t "Who can create and manage user groups" }}</label> <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"> <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> </select>
</div> </div>

View File

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