diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index d310ab001f..4b4036ee8a 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -306,13 +306,6 @@ export type CatalogEnvironment = { permissions: PermissionAuthorizer; }; -// @public -export type CatalogPermissionRule = PermissionRule< - Entity, - EntitiesSearchFilter, - TParams ->; - // Warning: (ae-missing-release-tag) "CatalogProcessingEngine" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // // @public (undocumented) @@ -531,8 +524,8 @@ export class CommonDatabase implements Database { // @public export const createCatalogPermissionRule: ( - rule: CatalogPermissionRule, -) => CatalogPermissionRule; + rule: PermissionRule, +) => PermissionRule; // Warning: (ae-missing-release-tag) "CreateDatabaseOptions" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) // @@ -1318,7 +1311,11 @@ export class NextCatalogBuilder { // Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen addEntityProvider(...providers: EntityProvider[]): NextCatalogBuilder; addPermissionRules( - ...permissionRules: CatalogPermissionRule[] + ...permissionRules: PermissionRule< + Entity, + EntitiesSearchFilter, + unknown[] + >[] ): void; // Warning: (tsdoc-param-tag-missing-hyphen) The @param block should be followed by a parameter name and then a hyphen addProcessor(...processors: CatalogProcessor[]): NextCatalogBuilder; @@ -1367,7 +1364,7 @@ export interface NextRouterOptions { // (undocumented) logger: Logger_2; // (undocumented) - permissionRules?: CatalogPermissionRule[]; + permissionRules?: PermissionRule[]; // (undocumented) refreshService?: RefreshService; } @@ -1402,12 +1399,28 @@ export function parseEntityYaml( // @public export const permissionRules: { - hasAnnotation: CatalogPermissionRule<[annotation: string]>; - hasLabel: CatalogPermissionRule<[label: string]>; - hasMetadata: CatalogPermissionRule<[key: string, value?: string | undefined]>; - hasSpec: CatalogPermissionRule<[key: string, value?: string | undefined]>; - isEntityKind: CatalogPermissionRule<[kinds: string[]]>; - isEntityOwner: CatalogPermissionRule<[claims: string[]]>; + hasAnnotation: PermissionRule< + Entity, + EntitiesSearchFilter, + [annotation: string] + >; + hasLabel: PermissionRule; + hasMetadata: PermissionRule< + Entity, + EntitiesSearchFilter, + [key: string, value?: string | undefined] + >; + hasSpec: PermissionRule< + Entity, + EntitiesSearchFilter, + [key: string, value?: string | undefined] + >; + isEntityKind: PermissionRule; + isEntityOwner: PermissionRule< + Entity, + EntitiesSearchFilter, + [claims: string[]] + >; }; // Warning: (ae-missing-release-tag) "PlaceholderProcessor" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) diff --git a/plugins/catalog-backend/src/permissions/index.ts b/plugins/catalog-backend/src/permissions/index.ts index e7ece1dbc7..624d6dd7ac 100644 --- a/plugins/catalog-backend/src/permissions/index.ts +++ b/plugins/catalog-backend/src/permissions/index.ts @@ -15,4 +15,3 @@ */ export * from './rules'; -export type { CatalogPermissionRule } from './types'; diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts index f82ace6580..81ebd52789 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts @@ -18,8 +18,9 @@ import { Entity } from '@backstage/catalog-model'; import { createCatalogPermissionRule } from './util'; /** - * A {@link CatalogPermissionRule} which filters for the presence of an - * annotation on a given entity. + * A catalog {@link @backstage/plugin-permission-node#PermissionRule} which + * filters for the presence of an annotation on a given entity. + * * @public */ export const hasAnnotation = createCatalogPermissionRule({ diff --git a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts index 8e5a3341d7..04b00d68fa 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts @@ -18,8 +18,8 @@ import { Entity } from '@backstage/catalog-model'; import { createCatalogPermissionRule } from './util'; /** - * A {@link CatalogPermissionRule} which filters for entities with a specified - * label in its metadata. + * A catalog {@link @backstage/plugin-permission-node#PermissionRule} which + * filters for entities with a specified label in its metadata. * @public */ export const hasLabel = createCatalogPermissionRule({ diff --git a/plugins/catalog-backend/src/permissions/rules/hasMetadata.ts b/plugins/catalog-backend/src/permissions/rules/hasMetadata.ts index fa592feb44..f5f25a5ecf 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasMetadata.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasMetadata.ts @@ -17,8 +17,9 @@ import { createPropertyRule } from './createPropertyRule'; /** - * A {@link CatalogPermissionRule} which filters for entities with the specified - * metadata subfield. Also matches on values if value is provided. + * A catalog {@link @backstage/plugin-permission-node#PermissionRule} which + * filters for entities with the specified metadata subfield. Also matches on + * values if value is provided. * * The key argument to the `apply` and `toQuery` methods can be nested, such as * 'field.nestedfield'. diff --git a/plugins/catalog-backend/src/permissions/rules/hasSpec.ts b/plugins/catalog-backend/src/permissions/rules/hasSpec.ts index 73a7519e1a..891cf1d58c 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasSpec.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasSpec.ts @@ -17,8 +17,9 @@ import { createPropertyRule } from './createPropertyRule'; /** - * A {@link CatalogPermissionRule} which filters for entities with the specified - * spec subfield. Also matches on values if value is provided. + * A catalog {@link @backstage/plugin-permission-node#PermissionRule} which + * filters for entities with the specified spec subfield. Also matches on values + * if value is provided. * * The key argument to the `apply` and `toQuery` methods can be nested, such as * 'field.nestedfield'. diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts index ddaecd314e..6356c94dc4 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts @@ -18,8 +18,8 @@ import { EntitiesSearchFilter } from '../../catalog/types'; import { createCatalogPermissionRule } from './util'; /** - * A {@link CatalogPermissionRule} which filters for entities with a specified - * kind. + * A catalog {@link @backstage/plugin-permission-node#PermissionRule} which + * filters for entities with a specified kind. * @public */ export const isEntityKind = createCatalogPermissionRule({ diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts index a7413c4941..3176b31b87 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts @@ -22,8 +22,8 @@ import { import { createCatalogPermissionRule } from './util'; /** - * A {@link CatalogPermissionRule} which filters for entities with a specified - * owner. + * A catalog {@link @backstage/plugin-permission-node#PermissionRule} which + * filters for entities with a specified owner. * @public */ export const isEntityOwner = createCatalogPermissionRule({ diff --git a/plugins/catalog-backend/src/permissions/rules/util.ts b/plugins/catalog-backend/src/permissions/rules/util.ts index 7d17d64e49..7ef0ca3546 100644 --- a/plugins/catalog-backend/src/permissions/rules/util.ts +++ b/plugins/catalog-backend/src/permissions/rules/util.ts @@ -14,7 +14,9 @@ * limitations under the License. */ -import { CatalogPermissionRule } from '../types'; +import { Entity } from '@backstage/catalog-model'; +import { makeCreatePermissionRule } from '@backstage/plugin-permission-node'; +import { EntitiesSearchFilter } from '../../catalog/types'; /** * Helper function for creating correctly-typed @@ -23,6 +25,7 @@ import { CatalogPermissionRule } from '../types'; * * @public */ -export const createCatalogPermissionRule = ( - rule: CatalogPermissionRule, -) => rule; +export const createCatalogPermissionRule = makeCreatePermissionRule< + Entity, + EntitiesSearchFilter +>(); diff --git a/plugins/catalog-backend/src/permissions/types.ts b/plugins/catalog-backend/src/permissions/types.ts deleted file mode 100644 index 4a0d9dc1fc..0000000000 --- a/plugins/catalog-backend/src/permissions/types.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2021 The Backstage Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import { Entity } from '@backstage/catalog-model'; -import { PermissionRule } from '@backstage/plugin-permission-node'; -import { EntitiesSearchFilter } from '../catalog/types'; - -/** - * A conditional rule that can be used to filter catalog entities for an - * authorization request. See - * {@link @backstage/plugin-permission-node#PermissionRule} for more details. - * - * @public - */ -export type CatalogPermissionRule = PermissionRule< - Entity, - EntitiesSearchFilter, - TParams ->; diff --git a/plugins/catalog-backend/src/service/NextCatalogBuilder.ts b/plugins/catalog-backend/src/service/NextCatalogBuilder.ts index e707423670..36d4347ede 100644 --- a/plugins/catalog-backend/src/service/NextCatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/NextCatalogBuilder.ts @@ -17,6 +17,7 @@ import { PluginDatabaseManager, UrlReader } from '@backstage/backend-common'; import { DefaultNamespaceEntityPolicy, + Entity, EntityPolicies, EntityPolicy, FieldFormatEntityPolicy, @@ -29,7 +30,7 @@ import { ScmIntegrations } from '@backstage/integration'; import { createHash } from 'crypto'; import { Router } from 'express'; import lodash from 'lodash'; -import { EntitiesCatalog } from '../catalog'; +import { EntitiesCatalog, EntitiesSearchFilter } from '../catalog'; import { DatabaseLocationsCatalog, LocationsCatalog, @@ -83,9 +84,9 @@ import { Config } from '@backstage/config'; import { Logger } from 'winston'; import { LocationService } from './types'; import { connectEntityProviders } from '../processing/connectEntityProviders'; -import { CatalogPermissionRule } from '../permissions/types'; import { permissionRules as catalogPermissionRules } from '../permissions/rules'; import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; +import { PermissionRule } from '@backstage/plugin-permission-node'; export type CatalogEnvironment = { logger: Logger; @@ -130,7 +131,11 @@ export class NextCatalogBuilder { maxSeconds: 150, }); private locationAnalyzer: LocationAnalyzer | undefined = undefined; - private permissionRules: CatalogPermissionRule[]; + private permissionRules: PermissionRule< + Entity, + EntitiesSearchFilter, + unknown[] + >[]; constructor(env: CatalogEnvironment) { this.env = env; @@ -331,7 +336,13 @@ export class NextCatalogBuilder { * * @param permissionRules - Additional permission rules */ - addPermissionRules(...permissionRules: CatalogPermissionRule[]) { + addPermissionRules( + ...permissionRules: PermissionRule< + Entity, + EntitiesSearchFilter, + unknown[] + >[] + ) { this.permissionRules.push(...permissionRules); } diff --git a/plugins/catalog-backend/src/service/NextRouter.ts b/plugins/catalog-backend/src/service/NextRouter.ts index 948424ec88..5338f58f91 100644 --- a/plugins/catalog-backend/src/service/NextRouter.ts +++ b/plugins/catalog-backend/src/service/NextRouter.ts @@ -25,14 +25,16 @@ import { import { Config } from '@backstage/config'; import { NotFoundError } from '@backstage/errors'; import { RESOURCE_TYPE_CATALOG_ENTITY } from '@backstage/plugin-catalog-common'; -import { createPermissionIntegrationRouter } from '@backstage/plugin-permission-node'; +import { + createPermissionIntegrationRouter, + PermissionRule, +} from '@backstage/plugin-permission-node'; import express from 'express'; import Router from 'express-promise-router'; import { Logger } from 'winston'; import yn from 'yn'; -import { EntitiesCatalog } from '../catalog'; +import { EntitiesCatalog, EntitiesSearchFilter } from '../catalog'; import { LocationAnalyzer } from '../ingestion/types'; -import { CatalogPermissionRule } from '../permissions/types'; import { basicEntityFilter, parseEntityFilterParams, @@ -49,7 +51,7 @@ export interface NextRouterOptions { refreshService?: RefreshService; logger: Logger; config: Config; - permissionRules?: CatalogPermissionRule[]; + permissionRules?: PermissionRule[]; } export async function createNextRouter(