refactor(catalog-node,catalog-backend): permissions cleanup step 2

Remove the deprecated alpha exports CatalogPermissionRuleInput,
CatalogPermissionExtensionPoint, and catalogPermissionExtensionPoint
from catalog-node, and remove the corresponding CatalogPermissionExtensionPointImpl,
addPermissions, and addPermissionRules from catalog-backend. Custom permission
rules and permissions are now registered via coreServices.permissionsRegistry.

Signed-off-by: Fredrik Adelöw <freben@spotify.com>
Made-with: Cursor
This commit is contained in:
Fredrik Adelöw
2026-04-03 21:36:46 +02:00
parent 205c8c8dc1
commit 056e18e4bf
7 changed files with 12 additions and 136 deletions
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-backend': patch
---
Removed the internal `addPermissions` and `addPermissionRules` methods from `CatalogBuilder`, and removed the `catalogPermissionExtensionPoint` wiring from `CatalogPlugin`. Custom permission rules and permissions should be registered via `coreServices.permissionsRegistry` directly.
@@ -0,0 +1,5 @@
---
'@backstage/plugin-catalog-node': minor
---
**BREAKING ALPHA**: Removed the deprecated `CatalogPermissionRuleInput`, `CatalogPermissionExtensionPoint`, and `catalogPermissionExtensionPoint` exports. Use `coreServices.permissionsRegistry` directly to register catalog entity permission rules and permissions.
@@ -52,7 +52,6 @@ import {
ScmLocationAnalyzer,
} from '@backstage/plugin-catalog-node';
import { EventsService } from '@backstage/plugin-events-node';
import { Permission } from '@backstage/plugin-permission-common';
import { createConditionTransformer } from '@backstage/plugin-permission-node';
import { durationToMilliseconds } from '@backstage/types';
import { DefaultCatalogDatabase } from '../database/DefaultCatalogDatabase';
@@ -101,7 +100,6 @@ import { DefaultRefreshService } from './DefaultRefreshService';
import { entitiesResponseToObjects } from './response';
import {
catalogEntityPermissionResourceRef,
CatalogPermissionRuleInput,
CatalogScmEventsService,
} from '@backstage/plugin-catalog-node/alpha';
import { filterAndSortProcessors, filterProviders } from './util';
@@ -167,8 +165,6 @@ export class CatalogBuilder {
}) => Promise<void> | void;
private processingInterval: ProcessingIntervalFunction;
private locationAnalyzer: LocationAnalyzer | undefined = undefined;
private readonly permissions: Permission[];
private readonly permissionRules: CatalogPermissionRuleInput[];
private allowedLocationType: string[];
/**
@@ -189,8 +185,6 @@ export class CatalogBuilder {
this.locationAnalyzers = [];
this.processorsReplace = false;
this.parser = undefined;
this.permissions = [...catalogPermissions];
this.permissionRules = Object.values(catalogPermissionRules);
this.allowedLocationType = ['url'];
this.processingInterval = CatalogBuilder.getDefaultProcessingInterval(
@@ -365,33 +359,6 @@ export class CatalogBuilder {
return this;
}
/**
* Adds additional permissions. See
* {@link @backstage/plugin-permission-node#Permission}.
*
* @param permissions - Additional permissions
*/
addPermissions(...permissions: Array<Permission | Array<Permission>>) {
this.permissions.push(...permissions.flat());
return this;
}
/**
* Adds additional permission rules. Permission rules are used to evaluate
* catalog resources against queries. See
* {@link @backstage/plugin-permission-node#PermissionRule}.
*
* @param permissionRules - Additional permission rules
*/
addPermissionRules(
...permissionRules: Array<
CatalogPermissionRuleInput | Array<CatalogPermissionRuleInput>
>
) {
this.permissionRules.push(...permissionRules.flat());
return this;
}
/**
* Sets up the allowed location types from being registered via the location service.
*
@@ -500,8 +467,8 @@ export class CatalogBuilder {
permissionsRegistry.addResourceType({
resourceRef: catalogEntityPermissionResourceRef,
getResources,
permissions: this.permissions,
rules: this.permissionRules,
permissions: [...catalogPermissions],
rules: Object.values(catalogPermissionRules),
});
const scmEventHandlingConfig = readScmEventHandlingConfig(config);
@@ -36,13 +36,9 @@ import {
import {
CatalogModelExtensionPoint,
catalogModelExtensionPoint,
CatalogPermissionExtensionPoint,
catalogPermissionExtensionPoint,
CatalogPermissionRuleInput,
catalogScmEventsServiceRef,
} from '@backstage/plugin-catalog-node/alpha';
import { eventsServiceRef } from '@backstage/plugin-events-node';
import { Permission } from '@backstage/plugin-permission-common';
import { merge } from 'lodash';
import { CatalogBuilder } from './CatalogBuilder';
import {
@@ -66,33 +62,6 @@ class CatalogLocationsExtensionPointImpl
}
}
class CatalogPermissionExtensionPointImpl
implements CatalogPermissionExtensionPoint
{
#permissions = new Array<Permission>();
#permissionRules = new Array<CatalogPermissionRuleInput>();
addPermissions(...permission: Array<Permission | Array<Permission>>): void {
this.#permissions.push(...permission.flat());
}
addPermissionRules(
...rules: Array<
CatalogPermissionRuleInput | Array<CatalogPermissionRuleInput>
>
): void {
this.#permissionRules.push(...rules.flat());
}
get permissions() {
return this.#permissions;
}
get permissionRules() {
return this.#permissionRules;
}
}
class CatalogModelExtensionPointImpl implements CatalogModelExtensionPoint {
#fieldValidators: Partial<Validators> = {};
@@ -189,12 +158,6 @@ export const catalogPlugin = createBackendPlugin({
},
});
const permissionExtensions = new CatalogPermissionExtensionPointImpl();
env.registerExtensionPoint(
catalogPermissionExtensionPoint,
permissionExtensions,
);
const modelExtensions = new CatalogModelExtensionPointImpl();
env.registerExtensionPoint(catalogModelExtensionPoint, modelExtensions);
@@ -282,8 +245,6 @@ export const catalogPlugin = createBackendPlugin({
} else {
builder.addLocationAnalyzers(...scmLocationAnalyzers);
}
builder.addPermissions(...permissionExtensions.permissions);
builder.addPermissionRules(...permissionExtensions.permissionRules);
builder.setFieldFormatValidators(modelExtensions.fieldValidators);
if (locationTypeExtensions.allowedLocationTypes) {
-23
View File
@@ -11,10 +11,7 @@ import { CatalogProcessorParser } from '@backstage/plugin-catalog-node';
import { EntitiesSearchFilter } from '@backstage/plugin-catalog-node';
import { Entity } from '@backstage/catalog-model';
import { ExtensionPoint } from '@backstage/backend-plugin-api';
import { Permission } from '@backstage/plugin-permission-common';
import { PermissionResourceRef } from '@backstage/plugin-permission-node';
import { PermissionRule } from '@backstage/plugin-permission-node';
import { PermissionRuleParams } from '@backstage/plugin-permission-common';
import { ServiceRef } from '@backstage/backend-plugin-api';
import { Validators } from '@backstage/catalog-model';
@@ -47,26 +44,6 @@ export interface CatalogModelExtensionPoint {
// @alpha (undocumented)
export const catalogModelExtensionPoint: ExtensionPoint<CatalogModelExtensionPoint>;
// @alpha @deprecated (undocumented)
export interface CatalogPermissionExtensionPoint {
// (undocumented)
addPermissionRules(
...rules: Array<
CatalogPermissionRuleInput | Array<CatalogPermissionRuleInput>
>
): void;
// (undocumented)
addPermissions(...permissions: Array<Permission | Array<Permission>>): void;
}
// @alpha @deprecated (undocumented)
export const catalogPermissionExtensionPoint: ExtensionPoint<CatalogPermissionExtensionPoint>;
// @alpha @deprecated (undocumented)
export type CatalogPermissionRuleInput<
TParams extends PermissionRuleParams = PermissionRuleParams,
> = PermissionRule<Entity, EntitiesSearchFilter, 'catalog-entity', TParams>;
// @alpha @deprecated (undocumented)
export type CatalogProcessingExtensionPoint = CatalogProcessingExtensionPoint_2;
-3
View File
@@ -100,8 +100,5 @@ export const catalogAnalysisExtensionPoint = _catalogAnalysisExtensionPoint;
export type { CatalogModelExtensionPoint } from './extensions';
export { catalogModelExtensionPoint } from './extensions';
export type { CatalogPermissionRuleInput } from './extensions';
export type { CatalogPermissionExtensionPoint } from './extensions';
export { catalogPermissionExtensionPoint } from './extensions';
export * from './scmEvents';
-36
View File
@@ -19,17 +19,11 @@ import { Entity, Validators } from '@backstage/catalog-model';
import {
CatalogProcessor,
CatalogProcessorParser,
EntitiesSearchFilter,
EntityProvider,
PlaceholderResolver,
LocationAnalyzer,
ScmLocationAnalyzer,
} from '@backstage/plugin-catalog-node';
import {
Permission,
PermissionRuleParams,
} from '@backstage/plugin-permission-common';
import { PermissionRule } from '@backstage/plugin-permission-node';
/**
* @public
@@ -163,33 +157,3 @@ export const catalogModelExtensionPoint =
createExtensionPoint<CatalogModelExtensionPoint>({
id: 'catalog.model',
});
/**
* @alpha
* @deprecated Use the `coreServices.permissionsRegistry` instead.
*/
export type CatalogPermissionRuleInput<
TParams extends PermissionRuleParams = PermissionRuleParams,
> = PermissionRule<Entity, EntitiesSearchFilter, 'catalog-entity', TParams>;
/**
* @alpha
* @deprecated Use the `coreServices.permissionsRegistry` instead.
*/
export interface CatalogPermissionExtensionPoint {
addPermissions(...permissions: Array<Permission | Array<Permission>>): void;
addPermissionRules(
...rules: Array<
CatalogPermissionRuleInput | Array<CatalogPermissionRuleInput>
>
): void;
}
/**
* @alpha
* @deprecated Use the `coreServices.permissionsRegistry` instead.
*/
export const catalogPermissionExtensionPoint =
createExtensionPoint<CatalogPermissionExtensionPoint>({
id: 'catalog.permission',
});