From 4ae5d647fb8893d77dccbb57d114855939a775ce Mon Sep 17 00:00:00 2001 From: Harshil Sharma <18575143+harshilsharma63@users.noreply.github.com> Date: Tue, 13 May 2025 12:22:25 +0530 Subject: [PATCH] Permission schema error fix (#30953) * Fixed an error in permission schema for team admins * Updated test --------- Co-authored-by: Mattermost Build --- ...mission_team_scheme_settings.test.tsx.snap | 432 +++++++++++++++++- .../permission_team_scheme_settings.test.tsx | 31 ++ .../permission_team_scheme_settings.tsx | 11 +- 3 files changed, 460 insertions(+), 14 deletions(-) diff --git a/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/__snapshots__/permission_team_scheme_settings.test.tsx.snap b/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/__snapshots__/permission_team_scheme_settings.test.tsx.snap index 73517daa97..ec63cf7ee8 100644 --- a/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/__snapshots__/permission_team_scheme_settings.test.tsx.snap +++ b/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/__snapshots__/permission_team_scheme_settings.test.tsx.snap @@ -1,28 +1,436 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings should match snapshot on edit with permissions 1`] = ``; +exports[`components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings should match snapshot on edit with permissions 1`] = ` +
+ +
+ + +
+
+
+
+
+
+ + + +
+
+ +
+
+ + +
+
+ + +
+
+
+ +
+
+ +
+
+
+ + + + + + + + + + + + +
+
+
+ + } + /> + + + +
+ +
+
+
+`; exports[`components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings should match snapshot on edit with permissions 2`] = ` Object { "all_users": Object { "displayName": "All members", "name": "all_users", - "permissions": Array [], + "permissions": Array [ + "invite_user", + "add_reaction", + "delete_post", + "delete_post", + ], + }, + "channel_admin": Object { + "name": "channel_admin", + "permissions": Array [ + "delete_post", + ], + }, + "channel_guest": Object { + "permissions": Array [ + "delete_post", + ], + }, + "channel_user": Object { + "permissions": Array [ + "add_reaction", + ], }, - "channel_admin": undefined, - "channel_guest": undefined, - "channel_user": undefined, "guests": Object { "displayName": "Guests", "name": "guests", - "permissions": undefined, + "permissions": Array [ + "edit_post", + "delete_post", + ], + }, + "playbook_admin": Object { + "permissions": Array [ + "delete_post", + ], + }, + "playbook_member": Object { + "permissions": Array [ + "delete_post", + ], + }, + "run_member": Object { + "permissions": Array [ + "delete_post", + ], + }, + "team_admin": Object { + "name": "team_admin", + "permissions": Array [ + "add_user_to_team", + ], + }, + "team_guest": Object { + "permissions": Array [ + "edit_post", + ], + }, + "team_user": Object { + "permissions": Array [ + "invite_user", + ], }, - "playbook_admin": undefined, - "playbook_member": undefined, - "run_member": undefined, - "team_admin": undefined, - "team_guest": undefined, - "team_user": undefined, } `; diff --git a/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings.test.tsx b/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings.test.tsx index d259c446e6..2476dfb373 100644 --- a/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings.test.tsx +++ b/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings.test.tsx @@ -336,12 +336,14 @@ describe('components/admin_console/permission_schemes_settings/permission_team_s permissions: ['invite_user'], }, bbb: { + name: 'team_admin', permissions: ['add_user_to_team'], }, ccc: { permissions: ['add_reaction'], }, ddd: { + name: 'channel_admin', permissions: ['delete_post'], }, eee: { @@ -350,6 +352,18 @@ describe('components/admin_console/permission_schemes_settings/permission_team_s fff: { permissions: ['delete_post'], }, + ggg: { + permissions: ['delete_post'], + }, + hhh: { + permissions: ['delete_post'], + }, + iii: { + permissions: ['delete_post'], + }, + jjj: { + permissions: ['delete_post'], + }, }, }; @@ -361,6 +375,23 @@ describe('components/admin_console/permission_schemes_settings/permission_team_s expect(getAnyInstance(wrapper).getStateRoles()).toMatchSnapshot(); done(); }); + + const instance = getAnyInstance(wrapper); + + // A moderated permission should set team/channel admins + instance.togglePermission('channel_admin', [Permissions.CREATE_POST]); + expect(getAnyState(wrapper).roles.channel_admin.permissions.indexOf(Permissions.CREATE_POST)).toBeGreaterThan(-1); + + // toggle again and disable + instance.togglePermission('channel_admin', [Permissions.CREATE_POST]); + expect(getAnyState(wrapper).roles.channel_admin.permissions.indexOf(Permissions.CREATE_POST)).toBe(-1); + + instance.togglePermission('team_admin', [Permissions.CREATE_POST]); + expect(getAnyState(wrapper).roles.team_admin.permissions.indexOf(Permissions.CREATE_POST)).toBeGreaterThan(-1); + + // toggle again and disable + instance.togglePermission('team_admin', [Permissions.CREATE_POST]); + expect(getAnyState(wrapper).roles.team_admin.permissions.indexOf(Permissions.CREATE_POST)).toBe(-1); }); test('should match snapshot on edit without guest permissions', (done) => { diff --git a/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings.tsx b/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings.tsx index a2aa3291c2..9230254261 100644 --- a/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings.tsx +++ b/webapp/channels/src/components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings.tsx @@ -502,7 +502,14 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent { const roles = {...this.getStateRoles()} as RolesMap; - const role = {...roles[roleId]} as Role; + const rolesKey = Object.keys(roles).find((roleKey) => roles[roleKey].name === roleId); + + if (!rolesKey) { + return; + } + + const role = {...roles[rolesKey]} as Role; + const newPermissions = [...role.permissions]; for (const permission of permissions) { if (newPermissions.indexOf(permission) === -1) { @@ -512,7 +519,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent