diff --git a/.changeset/slimy-turkeys-return.md b/.changeset/slimy-turkeys-return.md index 4229da49e3..db10000509 100644 --- a/.changeset/slimy-turkeys-return.md +++ b/.changeset/slimy-turkeys-return.md @@ -1,5 +1,22 @@ --- -'@backstage/plugin-permission-node': minor +'@backstage/plugin-permission-node': patch --- -`createPermissionIntegrationRouter` now can also take an array of `CreatePermissionIntegrationRouterResourceOptions`, accepting rules and permissions for multiple resource types. +`createPermissionIntegrationRouter` now accepts rules and permissions for multiple resource types. Example: + +```typescript +createPermissionIntegrationRouter({ + resources: [ + { + resourceType: 'resourceType-1', + permissions: permissionsResourceType1, + rules: rulesResourceType1, + }, + { + resourceType: 'resourceType-2', + permissions: permissionsResourceType2, + rules: rulesResourceType2, + }, + ], +}); +``` diff --git a/plugins/permission-node/api-report.md b/plugins/permission-node/api-report.md index 10e4a0eb3c..4aac4616ed 100644 --- a/plugins/permission-node/api-report.md +++ b/plugins/permission-node/api-report.md @@ -116,53 +116,6 @@ export const createConditionTransformer: < permissionRules: [...TRules], ) => ConditionTransformer; -// @public -export function createPermissionIntegrationRouter< - TResourceType extends string, - TResource, ->( - options: - | CreatePermissionIntegrationRouterResourceOptions - | { - resources: CreatePermissionIntegrationRouterResourceOptions< - TResourceType, - TResource - >; - }, -): express.Router; - -// @public -export function createPermissionIntegrationRouter( - options: - | { - permissions: Array; - } - | { - resources: { - permissions: Array; - }; - }, -): express.Router; - -// @public -export function createPermissionIntegrationRouter< - TResourceType1 extends string, - TResource1, - TResourceType2 extends string, - TResource2, ->(options: { - resources: [ - CreatePermissionIntegrationRouterResourceOptions< - TResourceType1, - TResource1 - >, - CreatePermissionIntegrationRouterResourceOptions< - TResourceType2, - TResource2 - >, - ]; -}): express.Router; - // @public export function createPermissionIntegrationRouter< TResourceType1 extends string, @@ -171,22 +124,24 @@ export function createPermissionIntegrationRouter< TResource2, TResourceType3 extends string, TResource3, ->(options: { - resources: [ - CreatePermissionIntegrationRouterResourceOptions< - TResourceType1, - TResource1 - >, - CreatePermissionIntegrationRouterResourceOptions< - TResourceType2, - TResource2 - >, - CreatePermissionIntegrationRouterResourceOptions< - TResourceType3, - TResource3 - >, - ]; -}): express.Router; +>( + options: + | { + permissions: Array; + } + | CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + > + | OptionResources< + TResourceType1, + TResource1, + TResourceType2, + TResource2, + TResourceType3, + TResource3 + >, +): express.Router; // @public export type CreatePermissionIntegrationRouterResourceOptions< @@ -250,13 +205,46 @@ export type MetadataResponseSerializedRule = { }; // @public -export type OptionResources = { - resources: - | { - permissions: Array; - } - | CreatePermissionIntegrationRouterResourceOptions - | Array>; +export type OptionResources< + TResourceType1 extends string = string, + TResource1 = any, + TResourceType2 extends string = string, + TResource2 = any, + TResourceType3 extends string = string, + TResource3 = any, +> = { + resources: Readonly< + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + ] + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType2, + TResource2 + >, + ] + | [ + CreatePermissionIntegrationRouterResourceOptions< + TResourceType1, + TResource1 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType2, + TResource2 + >, + CreatePermissionIntegrationRouterResourceOptions< + TResourceType3, + TResource3 + >, + ] + >; }; // @public diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 1ac53a4721..f417cb554a 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -207,6 +207,12 @@ export type CreatePermissionIntegrationRouterResourceOptions< ) => Promise>; }; +/** + * Options for creating a permission integration router exposing + * permissions and rules from multiple resource types. + * + * @public + */ export type OptionResources< TResourceType1 extends string = string, TResource1 = any,