Merge pull request #14092 from backstage/permissions/metadata-response-types
Exported types for the permission router metadata endpoint
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
---
|
||||
'@backstage/plugin-permission-node': patch
|
||||
---
|
||||
|
||||
Exported types for the .metadata endpoint of the permission router
|
||||
@@ -26,6 +26,7 @@ import { QueryPermissionRequest } from '@backstage/plugin-permission-common';
|
||||
import { ResourcePermission } from '@backstage/plugin-permission-common';
|
||||
import { TokenManager } from '@backstage/backend-common';
|
||||
import { z } from 'zod';
|
||||
import zodToJsonSchema from 'zod-to-json-schema';
|
||||
|
||||
// @public
|
||||
export type ApplyConditionsRequest = {
|
||||
@@ -160,6 +161,20 @@ export const makeCreatePermissionRule: <
|
||||
rule: PermissionRule<TResource, TQuery, TResourceType, TParams>,
|
||||
) => PermissionRule<TResource, TQuery, TResourceType, TParams>;
|
||||
|
||||
// @public
|
||||
export type MetadataResponse = {
|
||||
permissions?: Permission[];
|
||||
rules: MetadataResponseSerializedRule[];
|
||||
};
|
||||
|
||||
// @public
|
||||
export type MetadataResponseSerializedRule = {
|
||||
name: string;
|
||||
description: string;
|
||||
resourceType: string;
|
||||
paramsSchema?: ReturnType<typeof zodToJsonSchema>;
|
||||
};
|
||||
|
||||
// @public
|
||||
export interface PermissionPolicy {
|
||||
// (undocumented)
|
||||
|
||||
@@ -102,6 +102,29 @@ export type ApplyConditionsResponse = {
|
||||
items: ApplyConditionsResponseEntry[];
|
||||
};
|
||||
|
||||
/**
|
||||
* Serialized permission rules, with the paramsSchema
|
||||
* converted from a ZodSchema to a JsonSchema.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export type MetadataResponseSerializedRule = {
|
||||
name: string;
|
||||
description: string;
|
||||
resourceType: string;
|
||||
paramsSchema?: ReturnType<typeof zodToJsonSchema>;
|
||||
};
|
||||
|
||||
/**
|
||||
* Response type for the .metadata endpoint.
|
||||
*
|
||||
* @public
|
||||
*/
|
||||
export type MetadataResponse = {
|
||||
permissions?: Permission[];
|
||||
rules: MetadataResponseSerializedRule[];
|
||||
};
|
||||
|
||||
const applyConditions = <TResourceType extends string, TResource>(
|
||||
criteria: PermissionCriteria<PermissionCondition<TResourceType>>,
|
||||
resource: TResource | undefined,
|
||||
@@ -191,14 +214,21 @@ export const createPermissionIntegrationRouter = <
|
||||
router.use(express.json());
|
||||
|
||||
router.get('/.well-known/backstage/permissions/metadata', (_, res) => {
|
||||
const serializableRules = rules.map(rule => ({
|
||||
name: rule.name,
|
||||
description: rule.description,
|
||||
resourceType: rule.resourceType,
|
||||
paramsSchema: zodToJsonSchema(rule.paramsSchema ?? z.object({})),
|
||||
}));
|
||||
const serializedRules: MetadataResponseSerializedRule[] = rules.map(
|
||||
rule => ({
|
||||
name: rule.name,
|
||||
description: rule.description,
|
||||
resourceType: rule.resourceType,
|
||||
paramsSchema: zodToJsonSchema(rule.paramsSchema ?? z.object({})),
|
||||
}),
|
||||
);
|
||||
|
||||
return res.json({ permissions, rules: serializableRules });
|
||||
const responseJson: MetadataResponse = {
|
||||
permissions,
|
||||
rules: serializedRules,
|
||||
};
|
||||
|
||||
return res.json(responseJson);
|
||||
});
|
||||
|
||||
const getRule = createGetRule(rules);
|
||||
|
||||
Reference in New Issue
Block a user