permission-node: improve api report for createPermissionIntegrationRouter

Co-authored-by: Harry Hogg <hhogg@spotify.com>
Signed-off-by: Vincenzo Scamporlino <vincenzos@spotify.com>
This commit is contained in:
Vincenzo Scamporlino
2023-02-14 17:22:17 +01:00
parent afdb225025
commit dbf36da3eb
2 changed files with 40 additions and 30 deletions
+6 -6
View File
@@ -111,6 +111,11 @@ export const createConditionTransformer: <
permissionRules: [...TRules],
) => ConditionTransformer<TQuery>;
// @public
export const createIsAuthorized: <TResource, TQuery>(
rules: PermissionRule<TResource, TQuery, string, PermissionRuleParams>[],
) => (decision: PolicyDecision, resource: TResource | undefined) => boolean;
// @public
export const createPermissionIntegrationRouter: <
TResourceType extends string,
@@ -124,7 +129,7 @@ export const createPermissionIntegrationRouter: <
NoInfer<TResourceType>,
PermissionRuleParams
>[];
getResources?: GetResourcesFn<TResource> | undefined;
getResources: (resourceRefs: string[]) => Promise<(TResource | undefined)[]>;
}) => express.Router;
// @public
@@ -137,11 +142,6 @@ export const createPermissionRule: <
rule: PermissionRule<TResource, TQuery, TResourceType, TParams>,
) => PermissionRule<TResource, TQuery, TResourceType, TParams>;
// @public
export type GetResourcesFn<TResource> = (
resourceRefs: string[],
) => Promise<Array<TResource | undefined>>;
// @alpha
export const isAndCriteria: <T>(
criteria: PermissionCriteria<T>,
@@ -170,6 +170,40 @@ const applyConditions = <TResourceType extends string, TResource>(
return rule.apply(resource, criteria.params ?? {});
};
/**
* Options for creating a permission integration router specific
* for a particular resource type.
*
* @public
*/
export type CreatePermissionIntegrationRouterResourceOptions<
TResourceType extends string,
TResource,
> = {
resourceType: TResourceType;
permissions?: Array<Permission>;
// Do not infer value of TResourceType from supplied rules.
// instead only consider the resourceType parameter, and
// consider any rules whose resource type does not match
// to be an error.
rules: PermissionRule<TResource, any, NoInfer<TResourceType>>[];
getResources: GetResourcesFn<TResource>;
};
/**
* Options for creating a permission integration router.
*
* @public
*/
export type CreatePermissionIntegrationRouterOptions<
TResourceType extends string,
TResource,
> =
| {
permissions: Array<Permission>;
}
| CreatePermissionIntegrationRouterResourceOptions<TResourceType, TResource>;
/**
* Create an express Router which provides an authorization route to allow
* integration between the permission backend and other Backstage backend
@@ -205,30 +239,6 @@ const applyConditions = <TResourceType extends string, TResource>(
*
* @public
*/
type CreatePermissionIntegrationRouterResourceOptions<
TResourceType extends string,
TResource,
> = {
resourceType: TResourceType;
permissions?: Array<Permission>;
// Do not infer value of TResourceType from supplied rules.
// instead only consider the resourceType parameter, and
// consider any rules whose resource type does not match
// to be an error.
rules: PermissionRule<TResource, any, NoInfer<TResourceType>>[];
getResources: GetResourcesFn<TResource>;
};
type CreatePermissionIntegrationRouterOptions<
TResourceType extends string,
TResource,
> =
| {
permissions: Array<Permission>;
}
| CreatePermissionIntegrationRouterResourceOptions<TResourceType, TResource>;
export const createPermissionIntegrationRouter = <
TResourceType extends string,
TResource,