diff --git a/.changeset/wild-knives-wait.md b/.changeset/wild-knives-wait.md new file mode 100644 index 0000000000..460712b5d9 --- /dev/null +++ b/.changeset/wild-knives-wait.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-catalog-backend': minor +'@backstage/plugin-catalog-node': minor +--- + +Permission rules can now be added for the Catalog plugin through the `CatalogProcessingExtensionPoint` interface. diff --git a/plugins/catalog-backend/src/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts index fa53ef510b..844f56e766 100644 --- a/plugins/catalog-backend/src/service/CatalogPlugin.ts +++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts @@ -17,7 +17,7 @@ import { createBackendPlugin, coreServices, } from '@backstage/backend-plugin-api'; -import { CatalogBuilder } from './CatalogBuilder'; +import { CatalogBuilder, CatalogPermissionRuleInput } from './CatalogBuilder'; import { CatalogAnalysisExtensionPoint, catalogAnalysisExtensionPoint, @@ -38,6 +38,7 @@ class CatalogProcessingExtensionPointImpl #processors = new Array(); #entityProviders = new Array(); #placeholderResolvers: Record = {}; + #permissionRules = new Array(); addProcessor( ...processors: Array> @@ -59,6 +60,14 @@ class CatalogProcessingExtensionPointImpl this.#placeholderResolvers[key] = resolver; } + addPermissionRules( + ...rules: Array< + CatalogPermissionRuleInput | Array + > + ): void { + this.#permissionRules.push(...rules.flat()); + } + get processors() { return this.#processors; } @@ -70,6 +79,10 @@ class CatalogProcessingExtensionPointImpl get placeholderResolvers() { return this.#placeholderResolvers; } + + get permissionRules() { + return this.#permissionRules; + } } class CatalogAnalysisExtensionPointImpl @@ -142,6 +155,7 @@ export const catalogPlugin = createBackendPlugin({ ([key, resolver]) => builder.setPlaceholderResolver(key, resolver), ); builder.addLocationAnalyzers(...analysisExtensions.locationAnalyzers); + builder.addPermissionRules(...processingExtensions.permissionRules); const { processingEngine, router } = await builder.build(); diff --git a/plugins/catalog-node/package.json b/plugins/catalog-node/package.json index f76fde6ecf..841a7be4a5 100644 --- a/plugins/catalog-node/package.json +++ b/plugins/catalog-node/package.json @@ -46,6 +46,7 @@ "@backstage/catalog-client": "workspace:^", "@backstage/catalog-model": "workspace:^", "@backstage/errors": "workspace:^", + "@backstage/plugin-catalog-backend": "workspace:^", "@backstage/plugin-catalog-common": "workspace:^", "@backstage/types": "workspace:^" }, diff --git a/plugins/catalog-node/src/extensions.ts b/plugins/catalog-node/src/extensions.ts index 247ef142ad..02a18774cd 100644 --- a/plugins/catalog-node/src/extensions.ts +++ b/plugins/catalog-node/src/extensions.ts @@ -14,6 +14,7 @@ * limitations under the License. */ import { createExtensionPoint } from '@backstage/backend-plugin-api'; +import { CatalogPermissionRuleInput } from '@backstage/plugin-catalog-backend'; import { EntityProvider, CatalogProcessor, @@ -32,6 +33,11 @@ export interface CatalogProcessingExtensionPoint { ...providers: Array> ): void; addPlaceholderResolver(key: string, resolver: PlaceholderResolver): void; + addPermissionRules( + ...rules: Array< + CatalogPermissionRuleInput | Array + > + ): void; } /** diff --git a/yarn.lock b/yarn.lock index 19ca7d4edc..1d47eb1e10 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5939,6 +5939,7 @@ __metadata: "@backstage/catalog-model": "workspace:^" "@backstage/cli": "workspace:^" "@backstage/errors": "workspace:^" + "@backstage/plugin-catalog-backend": "workspace:^" "@backstage/plugin-catalog-common": "workspace:^" "@backstage/types": "workspace:^" languageName: unknown