Allow curators to remove themselves

This commit is contained in:
Paul Kaplan 2021-05-14 12:37:05 -04:00
parent 31655d7f11
commit acc88069e9
3 changed files with 22 additions and 8 deletions

View file

@ -31,7 +31,15 @@ const selectCanEditOpenToAll = state => isManager(state);
const selectShowCuratorInvite = state => !!state.studio.invited;
const selectCanInviteCurators = state => isManager(state);
const selectCanRemoveCurators = state => isManager(state) || selectIsAdmin(state);
const selectCanRemoveCurator = (state, username) => {
// Admins/managers can remove any curators
if (isManager(state) || selectIsAdmin(state)) return true;
// Curators can remove themselves
if (selectUsername(state) === username) {
return true;
}
return false;
};
const selectCanRemoveManager = (state, managerId) =>
(selectIsAdmin(state) || isManager(state)) && managerId !== state.studio.owner;
const selectCanPromoteCurators = state => isManager(state);
@ -63,7 +71,7 @@ export {
selectCanEditOpenToAll,
selectShowCuratorInvite,
selectCanInviteCurators,
selectCanRemoveCurators,
selectCanRemoveCurator,
selectCanRemoveManager,
selectCanPromoteCurators,
selectCanRemoveProject

View file

@ -6,7 +6,7 @@ import classNames from 'classnames';
import {FormattedMessage} from 'react-intl';
import {
selectCanRemoveCurators, selectCanRemoveManager, selectCanPromoteCurators
selectCanRemoveCurator, selectCanRemoveManager, selectCanPromoteCurators
} from '../../redux/studio-permissions';
import {
promoteCurator,
@ -109,8 +109,8 @@ const ManagerTile = connect(
)(StudioMemberTile);
const CuratorTile = connect(
state => ({
canRemove: selectCanRemoveCurators(state),
(state, ownProps) => ({
canRemove: selectCanRemoveCurator(state, ownProps.username),
canPromote: selectCanPromoteCurators(state)
}),
{

View file

@ -11,7 +11,7 @@ import {
selectCanEditOpenToAll,
selectShowCuratorInvite,
selectCanInviteCurators,
selectCanRemoveCurators,
selectCanRemoveCurator,
selectCanRemoveManager,
selectCanPromoteCurators,
selectCanRemoveProject
@ -287,7 +287,7 @@ describe('studio members', () => {
describe('can remove curators', () => {
test.each([
['admin', true],
['curator', false],
['curator', false], // except themselves, see test below
['manager', true],
['creator', true],
['logged in', false],
@ -295,7 +295,13 @@ describe('studio members', () => {
['logged out', false]
])('%s: %s', (role, expected) => {
setStateByRole(role);
expect(selectCanRemoveCurators(state)).toBe(expected);
expect(selectCanRemoveCurator(state, 'others-username')).toBe(expected);
});
test('curators can remove themselves', () => {
setStateByRole('curator');
const loggedInUsername = selectUsername(state);
expect(selectCanRemoveCurator(state, loggedInUsername)).toBe(true);
});
});