diff --git a/packages/web-client/src/helpers/space/functions.ts b/packages/web-client/src/helpers/space/functions.ts index 160bcaf2df..b38d5f5331 100644 --- a/packages/web-client/src/helpers/space/functions.ts +++ b/packages/web-client/src/helpers/space/functions.ts @@ -214,7 +214,7 @@ export function buildSpace( if (!this.disabled) { return false } - if (ability?.can('delete-all', 'Drive')) { + if (ability?.can('delete-all', 'Drive') || ability?.can('create-all', 'Drive')) { return true } // FIXME: server permissions are a mess currently: https://github.com/opencloud-eu/opencloud/issues/10 @@ -238,7 +238,7 @@ export function buildSpace( if (!this.disabled) { return false } - if (ability?.can('update-all', 'Drive')) { + if (ability?.can('update-all', 'Drive') || ability?.can('create-all', 'Drive')) { return true } // FIXME: server permissions are a mess currently: https://github.com/opencloud-eu/opencloud/issues/10 diff --git a/packages/web-client/tests/unit/helpers/space/functions.spec.ts b/packages/web-client/tests/unit/helpers/space/functions.spec.ts index 5e924e7a1b..4cf0480cc3 100644 --- a/packages/web-client/tests/unit/helpers/space/functions.spec.ts +++ b/packages/web-client/tests/unit/helpers/space/functions.spec.ts @@ -34,33 +34,39 @@ describe('buildSpace', () => { describe('canBeDeleted', () => { it.each([ { - userCan: false, + abilities: [], permissions: [GraphSharePermission.deletePermissions], disabled: true, expectedResult: true }, { - userCan: false, + abilities: [], permissions: [], disabled: true, expectedResult: false }, { - userCan: true, + abilities: ['delete-all'], permissions: [], disabled: true, expectedResult: true }, { - userCan: true, + abilities: ['create-all'], + permissions: [], + disabled: true, + expectedResult: true + }, + { + abilities: ['delete-all'], permissions: [], disabled: false, expectedResult: false } ])( 'behaves accordingly to the given permissions, abilities and disabled state', - ({ permissions, expectedResult, userCan, disabled }) => { - const ability = mock({ can: () => userCan }) + ({ permissions, expectedResult, abilities, disabled }) => { + const ability = mock({ can: (action) => abilities.includes(action) }) const space = getSpace({ permissions }) space.disabled = disabled expect(space.canBeDeleted({ user: mock({ id, memberOf: [] }), ability })).toBe( @@ -73,24 +79,29 @@ describe('buildSpace', () => { describe('canRename', () => { it.each([ { - userCan: false, + abilities: [], permissions: [GraphSharePermission.deletePermissions], expectedResult: true }, { - userCan: false, + abilities: [], permissions: [], expectedResult: false }, { - userCan: true, + abilities: ['update-all'], + permissions: [], + expectedResult: true + }, + { + abilities: ['create-all'], permissions: [], expectedResult: true } ])( 'behaves accordingly to the given role, permissions and abilities', - ({ permissions, expectedResult, userCan }) => { - const ability = mock({ can: () => userCan }) + ({ permissions, expectedResult, abilities }) => { + const ability = mock({ can: (action) => abilities.includes(action) }) const space = getSpace({ permissions }) expect(space.canRename({ user: mock({ id, memberOf: [] }), ability })).toBe( expectedResult @@ -102,24 +113,29 @@ describe('buildSpace', () => { describe('canEditDescription', () => { it.each([ { - userCan: false, + abilities: [], permissions: [GraphSharePermission.deletePermissions], expectedResult: true }, { - userCan: false, + abilities: [], permissions: [], expectedResult: false }, { - userCan: true, + abilities: ['update-all'], + permissions: [], + expectedResult: true + }, + { + abilities: ['create-all'], permissions: [], expectedResult: true } ])( 'behaves accordingly to the given role, permissions and abilities', - ({ permissions, expectedResult, userCan }) => { - const ability = mock({ can: () => userCan }) + ({ permissions, expectedResult, abilities }) => { + const ability = mock({ can: (action) => abilities.includes(action) }) const space = getSpace({ permissions }) expect(space.canEditDescription({ user: mock({ id, memberOf: [] }), ability })).toBe( expectedResult @@ -147,33 +163,39 @@ describe('buildSpace', () => { describe('canRestore', () => { it.each([ { - userCan: false, + abilities: [], permissions: [GraphSharePermission.deletePermissions], disabled: true, expectedResult: true }, { - userCan: false, + abilities: [], permissions: [], disabled: true, expectedResult: false }, { - userCan: true, + abilities: ['update-all'], permissions: [], disabled: true, expectedResult: true }, { - userCan: true, + abilities: ['create-all'], + permissions: [], + disabled: true, + expectedResult: true + }, + { + abilities: ['update-all'], permissions: [], disabled: false, expectedResult: false } ])( 'behaves accordingly to the given role, permissions, abilities and disabled state', - ({ permissions, expectedResult, userCan, disabled }) => { - const ability = mock({ can: () => userCan }) + ({ permissions, expectedResult, abilities, disabled }) => { + const ability = mock({ can: (action) => abilities.includes(action) }) const space = getSpace({ permissions }) space.disabled = disabled expect(space.canRestore({ user: mock({ id, memberOf: [] }), ability })).toBe(