From 0851834494d080b20942f4eb71cba91b6ba9e611 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 26 Nov 2024 12:47:07 -0600 Subject: [PATCH 1/7] Added missing scaffolder management permission Signed-off-by: Andre Wanlin --- .changeset/twenty-monkeys-applaud.md | 5 +++++ plugins/scaffolder-common/src/permissions.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 .changeset/twenty-monkeys-applaud.md diff --git a/.changeset/twenty-monkeys-applaud.md b/.changeset/twenty-monkeys-applaud.md new file mode 100644 index 0000000000..7c7ebf1efb --- /dev/null +++ b/.changeset/twenty-monkeys-applaud.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-scaffolder-common': patch +--- + +Added `templateManagementPermission` to `scaffolderTemplatePermissions` array so it will get pickup by the `permissionIntegrationRouter` diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index e758291e75..b8e14cdbb2 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -130,6 +130,7 @@ export const templateManagementPermission = createPermission({ export const scaffolderTemplatePermissions = [ templateParameterReadPermission, templateStepReadPermission, + templateManagementPermission, ]; /** @@ -156,5 +157,4 @@ export const scaffolderPermissions = [ ...scaffolderTemplatePermissions, ...scaffolderActionPermissions, ...scaffolderTaskPermissions, - templateManagementPermission, ]; From c34fd4ed4ab9ac2e90d51c988d259b5e4be4f0b6 Mon Sep 17 00:00:00 2001 From: Andre Wanlin Date: Tue, 26 Nov 2024 12:57:44 -0600 Subject: [PATCH 2/7] Updated API Report Signed-off-by: Andre Wanlin --- plugins/scaffolder-common/report-alpha.api.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/plugins/scaffolder-common/report-alpha.api.md b/plugins/scaffolder-common/report-alpha.api.md index 97a3de63c5..5813caa302 100644 --- a/plugins/scaffolder-common/report-alpha.api.md +++ b/plugins/scaffolder-common/report-alpha.api.md @@ -29,7 +29,10 @@ export const scaffolderPermissions: ( export const scaffolderTaskPermissions: BasicPermission[]; // @alpha -export const scaffolderTemplatePermissions: ResourcePermission<'scaffolder-template'>[]; +export const scaffolderTemplatePermissions: ( + | BasicPermission + | ResourcePermission<'scaffolder-template'> +)[]; // @alpha export const taskCancelPermission: BasicPermission; From 0aa3dd7fd30c7ed5edfa07ea3bac3bb0000fc5c4 Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 5 Dec 2024 13:07:08 +0100 Subject: [PATCH 3/7] permission-node: remove permission duplicates in createPermissionIntegrationRouter Signed-off-by: Vincenzo Scamporlino --- .../createPermissionIntegrationRouter.test.ts | 2 +- .../createPermissionIntegrationRouter.ts | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index 24e1b91065..a38059e547 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -904,7 +904,7 @@ describe('createPermissionIntegrationRouter', () => { const response = await request( express().use( createPermissionIntegrationRouter({ - permissions: [aPermission], + permissions: [aPermission, testPermission], resources: [ { resourceType: 'test-resource', diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 40d215d515..5210e6fb1c 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -328,11 +328,16 @@ export function createPermissionIntegrationRouter< > ).rules || [], ); - const allPermissions = [ - ...((options as { permissions: Permission[] }).permissions || []), - ...(optionsWithResources.resources?.flatMap(o => o.permissions || []) || - []), - ]; + + const allPermissions = Array.from( + new Map( + [ + ...((options as { permissions: Permission[] }).permissions || []), + ...(optionsWithResources.resources?.flatMap(o => o.permissions || []) || + []), + ].map(i => [i.name, i]), + ).values(), + ); const allResourceTypes = allOptions.reduce((acc, option) => { if ( From 966adff13706bd6b88daa6c24b4062fbe95b230a Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 5 Dec 2024 13:08:14 +0100 Subject: [PATCH 4/7] scaffolder-backend: expose templateManagementPermission Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-backend/src/service/router.ts | 4 ++-- plugins/scaffolder-common/src/permissions.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/scaffolder-backend/src/service/router.ts b/plugins/scaffolder-backend/src/service/router.ts index d8888058e8..1758eb3fba 100644 --- a/plugins/scaffolder-backend/src/service/router.ts +++ b/plugins/scaffolder-backend/src/service/router.ts @@ -41,7 +41,7 @@ import { RESOURCE_TYPE_SCAFFOLDER_ACTION, RESOURCE_TYPE_SCAFFOLDER_TEMPLATE, scaffolderActionPermissions, - scaffolderTaskPermissions, + scaffolderPermissions, scaffolderTemplatePermissions, taskCancelPermission, taskCreatePermission, @@ -445,7 +445,7 @@ export async function createRouter( rules: actionRules, }, ], - permissions: scaffolderTaskPermissions, + permissions: scaffolderPermissions, }); router.use(permissionIntegrationRouter); diff --git a/plugins/scaffolder-common/src/permissions.ts b/plugins/scaffolder-common/src/permissions.ts index b8e14cdbb2..e758291e75 100644 --- a/plugins/scaffolder-common/src/permissions.ts +++ b/plugins/scaffolder-common/src/permissions.ts @@ -130,7 +130,6 @@ export const templateManagementPermission = createPermission({ export const scaffolderTemplatePermissions = [ templateParameterReadPermission, templateStepReadPermission, - templateManagementPermission, ]; /** @@ -157,4 +156,5 @@ export const scaffolderPermissions = [ ...scaffolderTemplatePermissions, ...scaffolderActionPermissions, ...scaffolderTaskPermissions, + templateManagementPermission, ]; From 6016f8b25ee42fd9bdeb3d5936b049ae557ff1ee Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 5 Dec 2024 13:11:51 +0100 Subject: [PATCH 5/7] scaffolder-backend: refine changeset Signed-off-by: Vincenzo Scamporlino --- .changeset/twenty-monkeys-applaud.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/twenty-monkeys-applaud.md b/.changeset/twenty-monkeys-applaud.md index 7c7ebf1efb..a1b0c1d338 100644 --- a/.changeset/twenty-monkeys-applaud.md +++ b/.changeset/twenty-monkeys-applaud.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-scaffolder-common': patch +'@backstage/plugin-scaffolder-backend': patch --- -Added `templateManagementPermission` to `scaffolderTemplatePermissions` array so it will get pickup by the `permissionIntegrationRouter` +Resolved an issue where the `templateManagementPermission` was not being exposed through the `/permissions/metadata` endpoint. From b149e2a126c95c429b9a8a95021626c98c7e68cb Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 5 Dec 2024 13:14:43 +0100 Subject: [PATCH 6/7] permission-node: duplicate permissions changeset Signed-off-by: Vincenzo Scamporlino --- .changeset/rich-maps-invite.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/rich-maps-invite.md diff --git a/.changeset/rich-maps-invite.md b/.changeset/rich-maps-invite.md new file mode 100644 index 0000000000..927d8e9382 --- /dev/null +++ b/.changeset/rich-maps-invite.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-permission-node': patch +--- + +The `createPermissionIntegrationRouter` function now detects and prevents the exposure of duplicate permissions. From 8073e34d7f9531c4cf50dda2319f9ccbecdf345c Mon Sep 17 00:00:00 2001 From: Vincenzo Scamporlino Date: Thu, 5 Dec 2024 13:16:36 +0100 Subject: [PATCH 7/7] scaffolder-common: rollback api reports Signed-off-by: Vincenzo Scamporlino --- plugins/scaffolder-common/report-alpha.api.md | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/scaffolder-common/report-alpha.api.md b/plugins/scaffolder-common/report-alpha.api.md index 5813caa302..97a3de63c5 100644 --- a/plugins/scaffolder-common/report-alpha.api.md +++ b/plugins/scaffolder-common/report-alpha.api.md @@ -29,10 +29,7 @@ export const scaffolderPermissions: ( export const scaffolderTaskPermissions: BasicPermission[]; // @alpha -export const scaffolderTemplatePermissions: ( - | BasicPermission - | ResourcePermission<'scaffolder-template'> -)[]; +export const scaffolderTemplatePermissions: ResourcePermission<'scaffolder-template'>[]; // @alpha export const taskCancelPermission: BasicPermission;