mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 05:23:35 +00:00
settings: Add function to check permission for anonymous setting group.
This commit is contained in:
@@ -126,6 +126,15 @@ export const server_emoji_schema = z.object({
|
||||
|
||||
export const realm_emoji_map_schema = z.record(server_emoji_schema);
|
||||
|
||||
export const anonymous_group_type = z.object({
|
||||
direct_subgroups: z.array(z.number()),
|
||||
direct_members: z.array(z.number()),
|
||||
});
|
||||
|
||||
export const group_setting_type_schema = z.union([z.number(), anonymous_group_type]);
|
||||
|
||||
export type GroupSettingType = z.infer<typeof group_setting_type_schema>;
|
||||
|
||||
export const user_group_schema = z.object({
|
||||
description: z.string(),
|
||||
id: z.number(),
|
||||
|
||||
@@ -7,7 +7,7 @@ import * as group_permission_settings from "./group_permission_settings";
|
||||
import {$t} from "./i18n";
|
||||
import {page_params} from "./page_params";
|
||||
import * as settings_config from "./settings_config";
|
||||
import type {StateData, user_group_schema} from "./state_data";
|
||||
import type {GroupSettingType, StateData, user_group_schema} from "./state_data";
|
||||
import {current_user} from "./state_data";
|
||||
import type {UserOrMention} from "./typeahead_helper";
|
||||
import type {UserGroupUpdateEvent} from "./types";
|
||||
@@ -286,6 +286,28 @@ export function is_user_in_group(user_group_id: number, user_id: number): boolea
|
||||
return false;
|
||||
}
|
||||
|
||||
export function is_user_in_setting_group(
|
||||
setting_group: GroupSettingType,
|
||||
user_id: number,
|
||||
): boolean {
|
||||
if (typeof setting_group === "number") {
|
||||
return is_user_in_group(setting_group, user_id);
|
||||
}
|
||||
|
||||
const direct_members = setting_group.direct_members;
|
||||
if (direct_members.includes(user_id)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
const direct_subgroups = setting_group.direct_subgroups;
|
||||
for (const direct_subgroup_id of direct_subgroups) {
|
||||
if (is_user_in_group(direct_subgroup_id, user_id)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function get_display_name_for_system_group_option(setting_name: string, name: string): string {
|
||||
// We use a special label for the "Nobody" system group for clarity.
|
||||
if (setting_name === "direct_message_permission_group" && name === "Nobody") {
|
||||
|
||||
@@ -307,6 +307,25 @@ run_test("is_user_in_group", () => {
|
||||
assert.equal(user_groups.is_user_in_group(foo.id, 6), true);
|
||||
assert.equal(user_groups.is_user_in_group(foo.id, 3), false);
|
||||
|
||||
assert.equal(user_groups.is_user_in_setting_group(test.id, 4), true);
|
||||
assert.equal(user_groups.is_user_in_setting_group(test.id, 1), true);
|
||||
assert.equal(user_groups.is_user_in_setting_group(test.id, 6), true);
|
||||
assert.equal(user_groups.is_user_in_setting_group(test.id, 3), false);
|
||||
|
||||
const anonymous_setting_group = {
|
||||
direct_members: [8, 9],
|
||||
direct_subgroups: [admins.id, test.id],
|
||||
};
|
||||
assert.equal(user_groups.is_user_in_setting_group(anonymous_setting_group, 8), true);
|
||||
assert.equal(user_groups.is_user_in_setting_group(anonymous_setting_group, 9), true);
|
||||
assert.equal(user_groups.is_user_in_setting_group(anonymous_setting_group, 10), false);
|
||||
|
||||
assert.equal(user_groups.is_user_in_setting_group(anonymous_setting_group, 1), true);
|
||||
assert.equal(user_groups.is_user_in_setting_group(anonymous_setting_group, 4), true);
|
||||
assert.equal(user_groups.is_user_in_setting_group(anonymous_setting_group, 6), true);
|
||||
assert.equal(user_groups.is_user_in_setting_group(anonymous_setting_group, 2), false);
|
||||
assert.equal(user_groups.is_user_in_setting_group(anonymous_setting_group, 3), false);
|
||||
|
||||
blueslip.expect("error", "Could not find user group");
|
||||
assert.equal(user_groups.is_user_in_group(1111, 3), false);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user