permission-node: switch to array for getResources return value
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>
This commit is contained in:
@@ -276,10 +276,9 @@ describe('PermissionIntegrationClient', () => {
|
||||
createPermissionIntegrationRouter({
|
||||
resourceType: 'test-resource',
|
||||
getResources: async resourceRefs =>
|
||||
resourceRefs.reduce((acc, ref) => {
|
||||
acc[ref] = { id: ref };
|
||||
return acc;
|
||||
}, {} as Record<string, { id: string }>),
|
||||
resourceRefs.map(resourceRef => ({
|
||||
id: resourceRef,
|
||||
})),
|
||||
rules: [
|
||||
{
|
||||
name: 'RULE_1',
|
||||
|
||||
@@ -97,7 +97,7 @@ export const createConditionTransformer: <
|
||||
export const createPermissionIntegrationRouter: <TResource>(options: {
|
||||
resourceType: string;
|
||||
rules: PermissionRule<TResource, any, unknown[]>[];
|
||||
getResources: (resourceRefs: string[]) => Promise<Record<string, TResource>>;
|
||||
getResources: (resourceRefs: string[]) => Promise<(TResource | undefined)[]>;
|
||||
}) => express.Router;
|
||||
|
||||
// @public
|
||||
|
||||
@@ -22,10 +22,7 @@ import { createPermissionIntegrationRouter } from './createPermissionIntegration
|
||||
const mockGetResources: jest.MockedFunction<
|
||||
Parameters<typeof createPermissionIntegrationRouter>[0]['getResources']
|
||||
> = jest.fn(async resourceRefs =>
|
||||
resourceRefs.reduce(
|
||||
(acc, resourceRef) => ({ ...acc, [resourceRef]: { id: resourceRef } }),
|
||||
{},
|
||||
),
|
||||
resourceRefs.map(resourceRef => ({ id: resourceRef })),
|
||||
);
|
||||
|
||||
const testRule1 = {
|
||||
@@ -251,7 +248,9 @@ describe('createPermissionIntegrationRouter', () => {
|
||||
});
|
||||
|
||||
it('returns 200/DENY when resource is not found', async () => {
|
||||
mockGetResources.mockReturnValueOnce(Promise.resolve({}));
|
||||
mockGetResources.mockImplementationOnce(async resourceRefs =>
|
||||
resourceRefs.map(() => undefined),
|
||||
);
|
||||
|
||||
const response = await request(app)
|
||||
.post('/.well-known/backstage/permissions/apply-conditions')
|
||||
|
||||
@@ -156,7 +156,9 @@ const applyConditions = <TResource>(
|
||||
export const createPermissionIntegrationRouter = <TResource>(options: {
|
||||
resourceType: string;
|
||||
rules: PermissionRule<TResource, any>[];
|
||||
getResources: (resourceRefs: string[]) => Promise<Record<string, TResource>>;
|
||||
getResources: (
|
||||
resourceRefs: string[],
|
||||
) => Promise<Array<TResource | undefined>>;
|
||||
}): express.Router => {
|
||||
const { resourceType, rules, getResources } = options;
|
||||
const router = Router();
|
||||
@@ -188,9 +190,15 @@ export const createPermissionIntegrationRouter = <TResource>(options: {
|
||||
|
||||
assertValidResourceTypes(body);
|
||||
|
||||
const resources = await getResources(
|
||||
Array.from(new Set(body.map(({ resourceRef }) => resourceRef))),
|
||||
const resourceRefs = Array.from(
|
||||
new Set(body.map(({ resourceRef }) => resourceRef)),
|
||||
);
|
||||
const resourceArray = await getResources(resourceRefs);
|
||||
const resources = resourceRefs.reduce((acc, resourceRef, index) => {
|
||||
acc[resourceRef] = resourceArray[index];
|
||||
|
||||
return acc;
|
||||
}, {} as Record<string, TResource | undefined>);
|
||||
|
||||
return res.status(200).json(
|
||||
body.map(request => ({
|
||||
|
||||
Reference in New Issue
Block a user