From 1663303ab8446b008cfd0547af588605248a11ad Mon Sep 17 00:00:00 2001 From: lshwayne96 Date: Thu, 23 Nov 2023 10:50:23 +0800 Subject: [PATCH] Add new extension point for catalog permissions Signed-off-by: lshwayne96 --- .changeset/wild-knives-wait.md | 2 +- .../src/service/CatalogPlugin.ts | 41 ++++++++----- plugins/catalog-node/api-report-alpha.md | 19 ++++-- plugins/catalog-node/src/alpha.ts | 2 + plugins/catalog-node/src/extensions.ts | 60 ++++++++++++------- 5 files changed, 80 insertions(+), 44 deletions(-) diff --git a/.changeset/wild-knives-wait.md b/.changeset/wild-knives-wait.md index 460712b5d9..6aafbe7acd 100644 --- a/.changeset/wild-knives-wait.md +++ b/.changeset/wild-knives-wait.md @@ -3,4 +3,4 @@ '@backstage/plugin-catalog-node': minor --- -Permission rules can now be added for the Catalog plugin through the `CatalogProcessingExtensionPoint` interface. +Permission rules can now be added for the Catalog plugin through the `CatalogPermissionExtensionPoint` interface. diff --git a/plugins/catalog-backend/src/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts index 844f56e766..0800d41340 100644 --- a/plugins/catalog-backend/src/service/CatalogPlugin.ts +++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts @@ -23,6 +23,8 @@ import { catalogAnalysisExtensionPoint, CatalogProcessingExtensionPoint, catalogProcessingExtensionPoint, + CatalogPermissionExtensionPoint, + catalogPermissionExtensionPoint, } from '@backstage/plugin-catalog-node/alpha'; import { CatalogProcessor, @@ -38,7 +40,6 @@ class CatalogProcessingExtensionPointImpl #processors = new Array(); #entityProviders = new Array(); #placeholderResolvers: Record = {}; - #permissionRules = new Array(); addProcessor( ...processors: Array> @@ -60,14 +61,6 @@ class CatalogProcessingExtensionPointImpl this.#placeholderResolvers[key] = resolver; } - addPermissionRules( - ...rules: Array< - CatalogPermissionRuleInput | Array - > - ): void { - this.#permissionRules.push(...rules.flat()); - } - get processors() { return this.#processors; } @@ -79,10 +72,6 @@ class CatalogProcessingExtensionPointImpl get placeholderResolvers() { return this.#placeholderResolvers; } - - get permissionRules() { - return this.#permissionRules; - } } class CatalogAnalysisExtensionPointImpl @@ -99,6 +88,24 @@ class CatalogAnalysisExtensionPointImpl } } +class CatalogPermissionExtensionPointImpl + implements CatalogPermissionExtensionPoint +{ + #permissionRules = new Array(); + + addPermissionRules( + ...rules: Array< + CatalogPermissionRuleInput | Array + > + ): void { + this.#permissionRules.push(...rules.flat()); + } + + get permissionRules() { + return this.#permissionRules; + } +} + /** * Catalog plugin * @alpha @@ -119,6 +126,12 @@ export const catalogPlugin = createBackendPlugin({ analysisExtensions, ); + const permissionExtensions = new CatalogPermissionExtensionPointImpl(); + env.registerExtensionPoint( + catalogPermissionExtensionPoint, + permissionExtensions, + ); + env.registerInit({ deps: { logger: coreServices.logger, @@ -155,7 +168,7 @@ export const catalogPlugin = createBackendPlugin({ ([key, resolver]) => builder.setPlaceholderResolver(key, resolver), ); builder.addLocationAnalyzers(...analysisExtensions.locationAnalyzers); - builder.addPermissionRules(...processingExtensions.permissionRules); + builder.addPermissionRules(...permissionExtensions.permissionRules); const { processingEngine, router } = await builder.build(); diff --git a/plugins/catalog-node/api-report-alpha.md b/plugins/catalog-node/api-report-alpha.md index 676115c4d9..7350f9262c 100644 --- a/plugins/catalog-node/api-report-alpha.md +++ b/plugins/catalog-node/api-report-alpha.md @@ -23,6 +23,19 @@ export interface CatalogAnalysisExtensionPoint { // @alpha (undocumented) export const catalogAnalysisExtensionPoint: ExtensionPoint; +// @alpha (undocumented) +export interface CatalogPermissionExtensionPoint { + // (undocumented) + addPermissionRules( + ...rules: Array< + CatalogPermissionRuleInput | Array + > + ): void; +} + +// @alpha (undocumented) +export const catalogPermissionExtensionPoint: ExtensionPoint; + // @alpha (undocumented) export type CatalogPermissionRuleInput< TParams extends PermissionRuleParams = PermissionRuleParams, @@ -35,12 +48,6 @@ export interface CatalogProcessingExtensionPoint { ...providers: Array> ): void; // (undocumented) - addPermissionRules( - ...rules: Array< - CatalogPermissionRuleInput | Array - > - ): void; - // (undocumented) addPlaceholderResolver(key: string, resolver: PlaceholderResolver): void; // (undocumented) addProcessor( diff --git a/plugins/catalog-node/src/alpha.ts b/plugins/catalog-node/src/alpha.ts index 3d6194f986..f7b2ceac12 100644 --- a/plugins/catalog-node/src/alpha.ts +++ b/plugins/catalog-node/src/alpha.ts @@ -23,3 +23,5 @@ export type { EntitiesSearchFilter, CatalogPermissionRuleInput, } from './extensions'; +export type { CatalogPermissionExtensionPoint } from './extensions'; +export { catalogPermissionExtensionPoint } from './extensions'; diff --git a/plugins/catalog-node/src/extensions.ts b/plugins/catalog-node/src/extensions.ts index a165cd15cc..2dd0915ccf 100644 --- a/plugins/catalog-node/src/extensions.ts +++ b/plugins/catalog-node/src/extensions.ts @@ -14,30 +14,15 @@ * limitations under the License. */ import { createExtensionPoint } from '@backstage/backend-plugin-api'; -import { Entity } from '@backstage/catalog-model'; -import { PermissionRuleParams } from '@backstage/plugin-permission-common'; -import { PermissionRule } from '@backstage/plugin-permission-node'; import { EntityProvider, CatalogProcessor, PlaceholderResolver, ScmLocationAnalyzer, } from '@backstage/plugin-catalog-node'; - -/** - * @alpha - */ -export type EntitiesSearchFilter = { - key: string; - values?: string[]; -}; - -/** - * @alpha - */ -export type CatalogPermissionRuleInput< - TParams extends PermissionRuleParams = PermissionRuleParams, -> = PermissionRule; +import { Entity } from '@backstage/catalog-model'; +import { PermissionRuleParams } from '@backstage/plugin-permission-common'; +import { PermissionRule } from '@backstage/plugin-permission-node'; /** * @alpha @@ -50,11 +35,6 @@ export interface CatalogProcessingExtensionPoint { ...providers: Array> ): void; addPlaceholderResolver(key: string, resolver: PlaceholderResolver): void; - addPermissionRules( - ...rules: Array< - CatalogPermissionRuleInput | Array - > - ): void; } /** @@ -79,3 +59,37 @@ export const catalogAnalysisExtensionPoint = createExtensionPoint({ id: 'catalog.analysis', }); + +/** + * @alpha + */ +export type EntitiesSearchFilter = { + key: string; + values?: string[]; +}; + +/** + * @alpha + */ +export type CatalogPermissionRuleInput< + TParams extends PermissionRuleParams = PermissionRuleParams, +> = PermissionRule; + +/** + * @alpha + */ +export interface CatalogPermissionExtensionPoint { + addPermissionRules( + ...rules: Array< + CatalogPermissionRuleInput | Array + > + ): void; +} + +/** + * @alpha + */ +export const catalogPermissionExtensionPoint = + createExtensionPoint({ + id: 'catalog.permission', + });