Permission schema error fix (#30953)
* Fixed an error in permission schema for team admins * Updated test --------- Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
e1c94e7b63
Коммит
4ae5d647fb
@@ -1,28 +1,436 @@
|
|||||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
// 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`] = `<LoadingScreen />`;
|
exports[`components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings should match snapshot on edit with permissions 1`] = `
|
||||||
|
<div
|
||||||
|
className="wrapper--fixed"
|
||||||
|
>
|
||||||
|
<AdminHeader
|
||||||
|
withBackButton={true}
|
||||||
|
>
|
||||||
|
<div>
|
||||||
|
<Connect(Component)
|
||||||
|
className="fa fa-angle-left back"
|
||||||
|
to="/admin_console/user_management/permissions"
|
||||||
|
/>
|
||||||
|
<MemoizedFormattedMessage
|
||||||
|
defaultMessage="Team Scheme"
|
||||||
|
id="admin.permissions.teamScheme"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</AdminHeader>
|
||||||
|
<div
|
||||||
|
className="admin-console__wrapper"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="admin-console__content"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="banner info"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="banner__content"
|
||||||
|
>
|
||||||
|
<span>
|
||||||
|
<MemoizedFormattedMessage
|
||||||
|
defaultMessage="<linkOverrideTeam>Team Override Schemes</linkOverrideTeam> set the permissions for Team Admins, Channel Admins and other members in specific teams. Use a Team Override Scheme when specific teams need permission exceptions to the <linkSystemScheme>System Scheme</linkSystemScheme>."
|
||||||
|
id="admin.permissions.teamScheme.introBanner"
|
||||||
|
values={
|
||||||
|
Object {
|
||||||
|
"linkOverrideTeam": [Function],
|
||||||
|
"linkSystemScheme": [Function],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<AdminPanel
|
||||||
|
subtitle={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Set the name and description for this scheme.",
|
||||||
|
"id": "admin.permissions.teamScheme.schemeDetailsDescription",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
title={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Scheme Details",
|
||||||
|
"id": "admin.permissions.teamScheme.schemeDetailsTitle",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="team-scheme-details"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="form-group"
|
||||||
|
>
|
||||||
|
<label
|
||||||
|
className="control-label"
|
||||||
|
htmlFor="scheme-name"
|
||||||
|
>
|
||||||
|
<MemoizedFormattedMessage
|
||||||
|
defaultMessage="Scheme Name:"
|
||||||
|
id="admin.permissions.teamScheme.schemeNameLabel"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
<LocalizedPlaceholderInput
|
||||||
|
className="form-control"
|
||||||
|
disabled={false}
|
||||||
|
id="scheme-name"
|
||||||
|
onChange={[Function]}
|
||||||
|
placeholder={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Scheme Name",
|
||||||
|
"id": "admin.permissions.teamScheme.schemeNamePlaceholder",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
type="text"
|
||||||
|
value="Test scheme"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className="form-group"
|
||||||
|
>
|
||||||
|
<label
|
||||||
|
className="control-label"
|
||||||
|
htmlFor="scheme-description"
|
||||||
|
>
|
||||||
|
<MemoizedFormattedMessage
|
||||||
|
defaultMessage="Scheme Description:"
|
||||||
|
id="admin.permissions.teamScheme.schemeDescriptionLabel"
|
||||||
|
/>
|
||||||
|
</label>
|
||||||
|
<LocalizedPlaceholderTextarea
|
||||||
|
className="form-control"
|
||||||
|
disabled={false}
|
||||||
|
id="scheme-description"
|
||||||
|
onChange={[Function]}
|
||||||
|
placeholder={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Scheme Description",
|
||||||
|
"id": "admin.permissions.teamScheme.schemeDescriptionPlaceholder",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rows={5}
|
||||||
|
value="Test scheme description"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</AdminPanel>
|
||||||
|
<AdminPanelWithButton
|
||||||
|
buttonText={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Add Teams",
|
||||||
|
"id": "admin.permissions.teamScheme.addTeams",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
className="permissions-block"
|
||||||
|
disabled={false}
|
||||||
|
onButtonClick={[Function]}
|
||||||
|
subtitle={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Select teams where permission exceptions are required.",
|
||||||
|
"id": "admin.permissions.teamScheme.selectTeamsDescription",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
title={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Select teams to override permissions",
|
||||||
|
"id": "admin.permissions.teamScheme.selectTeamsTitle",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="teams-list"
|
||||||
|
>
|
||||||
|
<div
|
||||||
|
className="no-team-schemes"
|
||||||
|
>
|
||||||
|
<MemoizedFormattedMessage
|
||||||
|
defaultMessage="No team selected. Please add teams to this list."
|
||||||
|
id="admin.permissions.teamScheme.noTeams"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</AdminPanelWithButton>
|
||||||
|
<AdminPanelTogglable
|
||||||
|
className="permissions-block all_users"
|
||||||
|
id="all_users"
|
||||||
|
onToggle={[Function]}
|
||||||
|
open={true}
|
||||||
|
subtitle={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Permissions granted to all members, including administrators and newly created users.",
|
||||||
|
"id": "admin.permissions.systemScheme.allMembersDescription",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
title={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "All Members",
|
||||||
|
"id": "admin.permissions.systemScheme.allMembersTitle",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Connect(PermissionsTree)
|
||||||
|
onToggle={[Function]}
|
||||||
|
readOnly={false}
|
||||||
|
role={
|
||||||
|
Object {
|
||||||
|
"displayName": "All members",
|
||||||
|
"name": "all_users",
|
||||||
|
"permissions": Array [
|
||||||
|
"invite_user",
|
||||||
|
"add_reaction",
|
||||||
|
"delete_post",
|
||||||
|
"delete_post",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scope="team_scope"
|
||||||
|
selectRow={[Function]}
|
||||||
|
/>
|
||||||
|
</AdminPanelTogglable>
|
||||||
|
<AdminPanelTogglable
|
||||||
|
className="permissions-block channel_admin"
|
||||||
|
onToggle={[Function]}
|
||||||
|
open={true}
|
||||||
|
subtitle={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Permissions granted to channel creators and any users promoted to Channel Administrator.",
|
||||||
|
"id": "admin.permissions.systemScheme.channelAdminsDescription",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
title={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Channel Administrators",
|
||||||
|
"id": "admin.permissions.systemScheme.channelAdminsTitle",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Connect(PermissionsTree)
|
||||||
|
onToggle={[Function]}
|
||||||
|
parentRole={
|
||||||
|
Object {
|
||||||
|
"displayName": "All members",
|
||||||
|
"name": "all_users",
|
||||||
|
"permissions": Array [
|
||||||
|
"invite_user",
|
||||||
|
"add_reaction",
|
||||||
|
"delete_post",
|
||||||
|
"delete_post",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
readOnly={false}
|
||||||
|
role={
|
||||||
|
Object {
|
||||||
|
"name": "channel_admin",
|
||||||
|
"permissions": Array [
|
||||||
|
"delete_post",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scope="channel_scope"
|
||||||
|
selectRow={[Function]}
|
||||||
|
/>
|
||||||
|
</AdminPanelTogglable>
|
||||||
|
<AdminPanelTogglable
|
||||||
|
className="permissions-block"
|
||||||
|
onToggle={[Function]}
|
||||||
|
open={true}
|
||||||
|
subtitle={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Permissions granted to administrators of a playbook.",
|
||||||
|
"id": "admin.permissions.systemScheme.playbookAdminSubtitle",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
title={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Playbook Administrator",
|
||||||
|
"id": "admin.permissions.systemScheme.playbookAdmin",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<PermissionsTreePlaybooks
|
||||||
|
license={
|
||||||
|
Object {
|
||||||
|
"CustomPermissionsSchemes": "true",
|
||||||
|
"GuestAccountsPermissions": "true",
|
||||||
|
"IsLicensed": "true",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
onToggle={[Function]}
|
||||||
|
parentRole={
|
||||||
|
Object {
|
||||||
|
"displayName": "All members",
|
||||||
|
"name": "all_users",
|
||||||
|
"permissions": Array [
|
||||||
|
"invite_user",
|
||||||
|
"add_reaction",
|
||||||
|
"delete_post",
|
||||||
|
"delete_post",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
readOnly={false}
|
||||||
|
role={
|
||||||
|
Object {
|
||||||
|
"permissions": Array [
|
||||||
|
"delete_post",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scope="playbook_scope"
|
||||||
|
selectRow={[Function]}
|
||||||
|
/>
|
||||||
|
</AdminPanelTogglable>
|
||||||
|
<AdminPanelTogglable
|
||||||
|
className="permissions-block team_admin"
|
||||||
|
onToggle={[Function]}
|
||||||
|
open={true}
|
||||||
|
subtitle={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Permissions granted to team creators and any users promoted to Team Administrator.",
|
||||||
|
"id": "admin.permissions.systemScheme.teamAdminsDescription",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
title={
|
||||||
|
Object {
|
||||||
|
"defaultMessage": "Team Administrators",
|
||||||
|
"id": "admin.permissions.systemScheme.teamAdminsTitle",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
>
|
||||||
|
<Connect(PermissionsTree)
|
||||||
|
onToggle={[Function]}
|
||||||
|
parentRole={
|
||||||
|
Object {
|
||||||
|
"displayName": "All members",
|
||||||
|
"name": "all_users",
|
||||||
|
"permissions": Array [
|
||||||
|
"invite_user",
|
||||||
|
"add_reaction",
|
||||||
|
"delete_post",
|
||||||
|
"delete_post",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
readOnly={false}
|
||||||
|
role={
|
||||||
|
Object {
|
||||||
|
"name": "team_admin",
|
||||||
|
"permissions": Array [
|
||||||
|
"add_user_to_team",
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
scope="team_scope"
|
||||||
|
selectRow={[Function]}
|
||||||
|
/>
|
||||||
|
</AdminPanelTogglable>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
className="admin-console-save"
|
||||||
|
>
|
||||||
|
<SaveButton
|
||||||
|
disabled={true}
|
||||||
|
onClick={[Function]}
|
||||||
|
saving={false}
|
||||||
|
savingMessage={
|
||||||
|
<Memo(MemoizedFormattedMessage)
|
||||||
|
defaultMessage="Saving Config..."
|
||||||
|
id="admin.saving"
|
||||||
|
/>
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
<Connect(Component)
|
||||||
|
className="cancel-button"
|
||||||
|
to="/admin_console/user_management/permissions"
|
||||||
|
>
|
||||||
|
<MemoizedFormattedMessage
|
||||||
|
defaultMessage="Cancel"
|
||||||
|
id="admin.permissions.permissionSchemes.cancel"
|
||||||
|
/>
|
||||||
|
</Connect(Component)>
|
||||||
|
<div
|
||||||
|
className="error-message"
|
||||||
|
>
|
||||||
|
<Memo(FormError)
|
||||||
|
error={null}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings should match snapshot on edit with permissions 2`] = `
|
exports[`components/admin_console/permission_schemes_settings/permission_team_scheme_settings/permission_team_scheme_settings should match snapshot on edit with permissions 2`] = `
|
||||||
Object {
|
Object {
|
||||||
"all_users": Object {
|
"all_users": Object {
|
||||||
"displayName": "All members",
|
"displayName": "All members",
|
||||||
"name": "all_users",
|
"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 {
|
"guests": Object {
|
||||||
"displayName": "Guests",
|
"displayName": "Guests",
|
||||||
"name": "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,
|
|
||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|||||||
@@ -336,12 +336,14 @@ describe('components/admin_console/permission_schemes_settings/permission_team_s
|
|||||||
permissions: ['invite_user'],
|
permissions: ['invite_user'],
|
||||||
},
|
},
|
||||||
bbb: {
|
bbb: {
|
||||||
|
name: 'team_admin',
|
||||||
permissions: ['add_user_to_team'],
|
permissions: ['add_user_to_team'],
|
||||||
},
|
},
|
||||||
ccc: {
|
ccc: {
|
||||||
permissions: ['add_reaction'],
|
permissions: ['add_reaction'],
|
||||||
},
|
},
|
||||||
ddd: {
|
ddd: {
|
||||||
|
name: 'channel_admin',
|
||||||
permissions: ['delete_post'],
|
permissions: ['delete_post'],
|
||||||
},
|
},
|
||||||
eee: {
|
eee: {
|
||||||
@@ -350,6 +352,18 @@ describe('components/admin_console/permission_schemes_settings/permission_team_s
|
|||||||
fff: {
|
fff: {
|
||||||
permissions: ['delete_post'],
|
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();
|
expect(getAnyInstance(wrapper).getStateRoles()).toMatchSnapshot();
|
||||||
done();
|
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) => {
|
test('should match snapshot on edit without guest permissions', (done) => {
|
||||||
|
|||||||
@@ -502,7 +502,14 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
|||||||
|
|
||||||
togglePermission = (roleId: string, permissions: string[]) => {
|
togglePermission = (roleId: string, permissions: string[]) => {
|
||||||
const roles = {...this.getStateRoles()} as RolesMap;
|
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];
|
const newPermissions = [...role.permissions];
|
||||||
for (const permission of permissions) {
|
for (const permission of permissions) {
|
||||||
if (newPermissions.indexOf(permission) === -1) {
|
if (newPermissions.indexOf(permission) === -1) {
|
||||||
@@ -512,7 +519,7 @@ export default class PermissionTeamSchemeSettings extends React.PureComponent<Pr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
role.permissions = newPermissions;
|
role.permissions = newPermissions;
|
||||||
roles[roleId] = role;
|
roles[rolesKey] = role;
|
||||||
|
|
||||||
if (roleId === 'all_users') {
|
if (roleId === 'all_users') {
|
||||||
const channelAdminRole = {...roles.channel_admin} as Role;
|
const channelAdminRole = {...roles.channel_admin} as Role;
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user