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 selectShowCuratorInvite = state => !!state.studio.invited;
const selectCanInviteCurators = state => isManager(state); 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) => const selectCanRemoveManager = (state, managerId) =>
(selectIsAdmin(state) || isManager(state)) && managerId !== state.studio.owner; (selectIsAdmin(state) || isManager(state)) && managerId !== state.studio.owner;
const selectCanPromoteCurators = state => isManager(state); const selectCanPromoteCurators = state => isManager(state);
@ -63,7 +71,7 @@ export {
selectCanEditOpenToAll, selectCanEditOpenToAll,
selectShowCuratorInvite, selectShowCuratorInvite,
selectCanInviteCurators, selectCanInviteCurators,
selectCanRemoveCurators, selectCanRemoveCurator,
selectCanRemoveManager, selectCanRemoveManager,
selectCanPromoteCurators, selectCanPromoteCurators,
selectCanRemoveProject selectCanRemoveProject

View file

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

View file

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