diff --git a/plugins/catalog-backend/api-report.md b/plugins/catalog-backend/api-report.md index 7efdfec424..a770d6289e 100644 --- a/plugins/catalog-backend/api-report.md +++ b/plugins/catalog-backend/api-report.md @@ -19,6 +19,7 @@ import { JsonValue } from '@backstage/types'; import { LocationEntityV1alpha1 } from '@backstage/catalog-model'; import { Logger } from 'winston'; import { Permission } from '@backstage/plugin-permission-common'; +import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; import { PermissionCondition } from '@backstage/plugin-permission-common'; import { PermissionCriteria } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; @@ -181,7 +182,7 @@ export type CatalogEnvironment = { database: PluginDatabaseManager; config: Config; reader: UrlReader; - permissions: PermissionEvaluator; + permissions: PermissionEvaluator | PermissionAuthorizer; }; // @alpha diff --git a/plugins/catalog-backend/src/service/CatalogBuilder.ts b/plugins/catalog-backend/src/service/CatalogBuilder.ts index 90ffc467c2..f5f00cd0fc 100644 --- a/plugins/catalog-backend/src/service/CatalogBuilder.ts +++ b/plugins/catalog-backend/src/service/CatalogBuilder.ts @@ -382,13 +382,13 @@ export class CatalogBuilder { const unauthorizedEntitiesCatalog = new DefaultEntitiesCatalog(dbClient); let permissionEvaluator: PermissionEvaluator; - if (!permissions.hasOwnProperty('query')) { + if ('query' in permissions) { + permissionEvaluator = permissions as PermissionEvaluator; + } else { logger.warn( - 'PermissionAuthorizer is deprecated. Please use PermissionEvaluator instead of PermissionAuthorizer in catalog.ts', + 'PermissionAuthorizer is deprecated. Please use an instance of PermissionEvaluator instead of PermissionAuthorizer in PluginEnvironment#permissions', ); permissionEvaluator = toPermissionEvaluator(permissions); - } else { - permissionEvaluator = permissions as PermissionEvaluator; } const entitiesCatalog = new AuthorizedEntitiesCatalog( diff --git a/plugins/jenkins-backend/api-report.md b/plugins/jenkins-backend/api-report.md index 315187e669..029f2c7af3 100644 --- a/plugins/jenkins-backend/api-report.md +++ b/plugins/jenkins-backend/api-report.md @@ -8,6 +8,7 @@ import { CompoundEntityRef } from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import express from 'express'; import { Logger } from 'winston'; +import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; // Warning: (ae-missing-release-tag) "createRouter" is exported by the package, but it is missing a release tag (@alpha, @beta, @public, or @internal) @@ -98,6 +99,6 @@ export interface RouterOptions { // (undocumented) logger: Logger; // (undocumented) - permissions?: PermissionEvaluator; + permissions?: PermissionEvaluator | PermissionAuthorizer; } ``` diff --git a/plugins/jenkins-backend/src/service/router.ts b/plugins/jenkins-backend/src/service/router.ts index 8787be70df..f6bd21c633 100644 --- a/plugins/jenkins-backend/src/service/router.ts +++ b/plugins/jenkins-backend/src/service/router.ts @@ -40,11 +40,11 @@ export async function createRouter( const { jenkinsInfoProvider, permissions, logger } = options; let permissionEvaluator: PermissionEvaluator | undefined; - if (permissions?.hasOwnProperty('query')) { + if (permissions && 'query' in permissions) { permissionEvaluator = permissions as PermissionEvaluator; } else { logger.warn( - 'PermissionAuthorizer is deprecated. Please use PermissionEvaluator instead of PermissionAuthorizer in your jenkins.ts', + 'PermissionAuthorizer is deprecated. Please use an instance of PermissionEvaluator instead of PermissionAuthorizer in PluginEnvironment#permissions', ); permissionEvaluator = permissions ? toPermissionEvaluator(permissions) diff --git a/plugins/permission-common/api-report.md b/plugins/permission-common/api-report.md index e33449c3d6..41abb62cf6 100644 --- a/plugins/permission-common/api-report.md +++ b/plugins/permission-common/api-report.md @@ -225,4 +225,9 @@ export type ResourcePermission = resourceType: TResourceType; } >; + +// @public +export function toPermissionEvaluator( + permissionAuthorizer: PermissionAuthorizer, +): PermissionEvaluator; ``` diff --git a/plugins/permission-common/src/permissions/util.ts b/plugins/permission-common/src/permissions/util.ts index b40b582149..6e0aca457b 100644 --- a/plugins/permission-common/src/permissions/util.ts +++ b/plugins/permission-common/src/permissions/util.ts @@ -87,6 +87,11 @@ export function isDeletePermission(permission: Permission) { return permission.attributes.action === 'delete'; } +/** + * Convert {@link PermissionAuthorizer} to {@link PermissionEvaluator}. + * + * @public + */ export function toPermissionEvaluator( permissionAuthorizer: PermissionAuthorizer, ): PermissionEvaluator { @@ -103,8 +108,8 @@ export function toPermissionEvaluator( requests: QueryPermissionRequest[], options?: EvaluatorRequestOptions, ): Promise { - // @ts-expect-error - const parsedRequests: AuthorizePermissionRequest[] = requests; + const parsedRequests = + requests as unknown as AuthorizePermissionRequest[]; return permissionAuthorizer.authorize(parsedRequests, options); }, }; diff --git a/plugins/search-backend/api-report.md b/plugins/search-backend/api-report.md index dc14d2f15b..c5c8eb7a13 100644 --- a/plugins/search-backend/api-report.md +++ b/plugins/search-backend/api-report.md @@ -7,6 +7,7 @@ import { Config } from '@backstage/config'; import { DocumentTypeInfo } from '@backstage/plugin-search-common'; import express from 'express'; import { Logger } from 'winston'; +import { PermissionAuthorizer } from '@backstage/plugin-permission-common'; import { PermissionEvaluator } from '@backstage/plugin-permission-common'; import { SearchEngine } from '@backstage/plugin-search-backend-node'; @@ -21,7 +22,7 @@ export function createRouter(options: RouterOptions): Promise; export type RouterOptions = { engine: SearchEngine; types: Record; - permissions: PermissionEvaluator; + permissions: PermissionEvaluator | PermissionAuthorizer; config: Config; logger: Logger; }; diff --git a/plugins/search-backend/src/service/router.ts b/plugins/search-backend/src/service/router.ts index bd956a9ff8..11f0eb22e6 100644 --- a/plugins/search-backend/src/service/router.ts +++ b/plugins/search-backend/src/service/router.ts @@ -76,13 +76,13 @@ export async function createRouter( }); let permissionEvaluator: PermissionEvaluator; - if (!permissions.hasOwnProperty('query')) { + if ('query' in permissions) { + permissionEvaluator = permissions as PermissionEvaluator; + } else { logger.warn( - 'PermissionAuthorizer is deprecated. Please use PermissionEvaluator instead of PermissionAuthorizer in search.ts', + 'PermissionAuthorizer is deprecated. Please use an instance of PermissionEvaluator instead of PermissionAuthorizer in PluginEnvironment#permissions', ); permissionEvaluator = toPermissionEvaluator(permissions); - } else { - permissionEvaluator = permissions as PermissionEvaluator; } const engine = config.getOptionalBoolean('permission.enabled')