[permissions] Add workspace + security settings permission gates (#10204)

In this PR

- closing https://github.com/twentyhq/core-team-issues/issues/313
- adding permission gates on workspace settings and security settings
- adding integration tests for each of the protected setting and
security
This commit is contained in:
Marie
2025-02-14 17:32:42 +01:00
committed by GitHub
parent db526778e3
commit 12cc61e096
84 changed files with 857 additions and 155 deletions

View File

@ -26,7 +26,7 @@ describe('apiKeysResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -34,7 +34,7 @@ describe('attachmentsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -30,7 +30,7 @@ describe('auditLogsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -25,7 +25,7 @@ describe('blocklistsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -27,7 +27,7 @@ describe('calendarChannelEventAssociationsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -35,7 +35,7 @@ describe('calendarChannelsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -30,7 +30,7 @@ describe('calendarEventParticipantsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -32,7 +32,7 @@ describe('companiesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -32,7 +32,7 @@ describe('connectedAccountsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -36,7 +36,7 @@ describe('favoritesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -27,7 +27,7 @@ describe('indexMetadatasResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -28,7 +28,7 @@ describe('messageChannelMessageAssociationsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -38,7 +38,7 @@ describe('messageChannelsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('messageParticipantsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -23,7 +23,7 @@ describe('messageThreadsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('noteTargetsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('notesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -35,7 +35,7 @@ describe('objectsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -30,7 +30,7 @@ describe('opportunitiesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -32,7 +32,7 @@ describe('peopleResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('petsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('searchApiKeysResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -34,7 +34,7 @@ describe('searchAttachmentsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -30,7 +30,7 @@ describe('searchAuditLogsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -25,7 +25,7 @@ describe('searchBlocklistsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -27,7 +27,7 @@ describe('searchCalendarChannelEventAssociationsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -35,7 +35,7 @@ describe('searchCalendarChannelsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -30,7 +30,7 @@ describe('searchCalendarEventParticipantsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -34,7 +34,7 @@ describe('searchCalendarEventsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -32,7 +32,7 @@ describe('searchCompaniesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -32,7 +32,7 @@ describe('searchConnectedAccountsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -36,7 +36,7 @@ describe('searchFavoritesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -28,7 +28,7 @@ describe('searchMessageChannelMessageAssociationsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -38,7 +38,7 @@ describe('searchMessageChannelsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('searchMessageParticipantsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -23,7 +23,7 @@ describe('searchMessageThreadsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -28,7 +28,7 @@ describe('searchMessagesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('searchNoteTargetsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('searchNotesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -30,7 +30,7 @@ describe('searchOpportunitiesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -32,7 +32,7 @@ describe('searchPeopleResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('searchPetsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('searchTaskTargetsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('searchTasksResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -40,7 +40,7 @@ describe('searchTimelineActivitiesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -28,7 +28,7 @@ describe('searchViewFieldsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -28,7 +28,7 @@ describe('searchViewFiltersResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('searchViewSortsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -31,7 +31,7 @@ describe('searchViewsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('searchWebhooksResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -25,7 +25,7 @@ describe('searchWorkflowEventListenersResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -32,7 +32,7 @@ describe('searchWorkflowRunsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('searchWorkflowVersionsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -27,7 +27,7 @@ describe('searchWorkflowsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -31,7 +31,7 @@ describe('searchWorkspaceMembersResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -24,7 +24,7 @@ describe('serverlessFunctionsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('taskTargetsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('tasksResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -40,7 +40,7 @@ describe('timelineActivitiesResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -28,7 +28,7 @@ describe('viewFieldsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -28,7 +28,7 @@ describe('viewFiltersResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('viewSortsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -31,7 +31,7 @@ describe('viewsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -26,7 +26,7 @@ describe('webhooksResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -25,7 +25,7 @@ describe('workflowEventListenersResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -29,7 +29,7 @@ describe('workflowVersionsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -27,7 +27,7 @@ describe('workflowsResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {

View File

@ -31,7 +31,7 @@ describe('workspaceMembersResolver (e2e)', () => {
return client
.post('/graphql')
.set('Authorization', `Bearer ${ACCESS_TOKEN}`)
.set('Authorization', `Bearer ${ADMIN_ACCESS_TOKEN}`)
.send(queryData)
.expect(200)
.expect((res) => {