feat(server): support editor -> viewer seat downgrades (#4181)

* new seat based project role checks implemented

* everything done

* minor bugfix
This commit is contained in:
Kristaps Fabians Geikins
2025-03-14 14:21:25 +02:00
committed by GitHub
parent 50fd05afe8
commit d903e8ffc4
30 changed files with 975 additions and 337 deletions
@@ -127,7 +127,7 @@ export default FF_WORKSPACES_MODULE_ENABLED
workspaceJoinRequestMutations: () => ({})
},
WorkspaceJoinRequestMutations: {
approve: async (_parent, args) => {
approve: async (_parent, args, ctx) => {
const approveWorkspaceJoinRequest =
commandFactory<ApproveWorkspaceJoinRequest>({
db,
@@ -163,7 +163,8 @@ export default FF_WORKSPACES_MODULE_ENABLED
})
return await approveWorkspaceJoinRequest({
userId: args.input.userId,
workspaceId: args.input.workspaceId
workspaceId: args.input.workspaceId,
approvedByUserId: ctx.userId!
})
},
deny: async (_parent, args) => {
@@ -98,7 +98,7 @@ import {
import {
createWorkspaceProjectFactory,
getWorkspaceProjectsFactory,
getWorkspaceRoleToDefaultProjectRoleMappingFactory,
getWorkspaceRolesAllowedProjectRolesFactory,
moveProjectToWorkspaceFactory,
queryAllWorkspaceProjectsFactory
} from '@/modules/workspaces/services/projects'
@@ -177,6 +177,7 @@ import { getDefaultRegionFactory } from '@/modules/workspaces/repositories/regio
import { convertFunctionToGraphQLReturn } from '@/modules/automate/services/functionManagement'
import {
getWorkspacePlanFactory,
getWorkspaceWithPlanFactory,
upsertWorkspacePlanFactory
} from '@/modules/gatekeeper/repositories/billing'
import { Knex } from 'knex'
@@ -206,6 +207,7 @@ import {
import { ensureValidWorkspaceRoleSeatFactory } from '@/modules/workspaces/services/workspaceSeat'
import {
createWorkspaceSeatFactory,
getWorkspaceRolesAndSeatsFactory,
getWorkspaceUserSeatFactory
} from '@/modules/gatekeeper/repositories/workspaceSeat'
@@ -606,7 +608,12 @@ export = FF_WORKSPACES_MODULE_ENABLED
})
})
})
await updateWorkspaceRole({ userId, workspaceId, role })
await updateWorkspaceRole({
userId,
workspaceId,
role,
updatedByUserId: context.userId!
})
}
return await getWorkspaceFactory({ db })({
@@ -1004,10 +1011,10 @@ export = FF_WORKSPACES_MODULE_ENABLED
updateProject: updateProjectFactory({ db }),
upsertProjectRole: upsertProjectRoleFactory({ db }),
getProjectCollaborators: getProjectCollaboratorsFactory({ db }),
getWorkspaceRoles: getWorkspaceRolesFactory({ db }),
getWorkspaceRoleToDefaultProjectRoleMapping:
getWorkspaceRoleToDefaultProjectRoleMappingFactory({
getWorkspace: getWorkspaceFactory({ db })
getWorkspaceRolesAndSeats: getWorkspaceRolesAndSeatsFactory({ db }),
getWorkspaceRolesAllowedProjectRoles:
getWorkspaceRolesAllowedProjectRolesFactory({
getWorkspaceWithPlan: getWorkspaceWithPlanFactory({ db })
}),
updateWorkspaceRole: updateWorkspaceRoleFactory({
getWorkspaceRoles: getWorkspaceRolesFactory({ db }),
@@ -1025,7 +1032,11 @@ export = FF_WORKSPACES_MODULE_ENABLED
})
})
return await moveProjectToWorkspace({ projectId, workspaceId })
return await moveProjectToWorkspace({
projectId,
workspaceId,
movedByUserId: context.userId!
})
}
},
Workspace: {