Added parameter scheamas to permission rules

Signed-off-by: Harry Hogg <hhogg@spotify.com>
This commit is contained in:
Harry Hogg
2022-09-28 15:07:28 +01:00
parent 4c480aeefb
commit e9b4191071
16 changed files with 47 additions and 1 deletions
@@ -18,6 +18,7 @@ import {
AuthorizeResult,
createPermission,
} from '@backstage/plugin-permission-common';
import { z } from 'zod';
import { createConditionExports } from './createConditionExports';
import { createPermissionRule } from './createPermissionRule';
@@ -30,6 +31,7 @@ const testIntegration = () =>
name: 'testRule1',
description: 'Test rule 1',
resourceType: 'test-resource',
schema: z.tuple([z.string(), z.number()]),
apply: jest.fn(
(_resource: any, _firstParam: string, _secondParam: number) => true,
),
@@ -42,6 +44,7 @@ const testIntegration = () =>
name: 'testRule2',
description: 'Test rule 2',
resourceType: 'test-resource',
schema: z.tuple([z.object({})]),
apply: jest.fn((_resource: any, _firstParam: object) => false),
toQuery: jest.fn((firstParam: object) => ({
query: 'testRule2',
@@ -14,6 +14,7 @@
* limitations under the License.
*/
import { z } from 'zod';
import { createConditionFactory } from './createConditionFactory';
import { createPermissionRule } from './createPermissionRule';
@@ -22,6 +23,7 @@ describe('createConditionFactory', () => {
name: 'test-rule',
description: 'test-description',
resourceType: 'test-resource',
schema: z.tuple([]),
apply: jest.fn(),
toQuery: jest.fn(),
});
@@ -18,6 +18,7 @@ import {
PermissionCondition,
PermissionCriteria,
} from '@backstage/plugin-permission-common';
import { z } from 'zod';
import { createConditionTransformer } from './createConditionTransformer';
import { createPermissionRule } from './createPermissionRule';
@@ -26,6 +27,7 @@ const transformConditions = createConditionTransformer([
name: 'test-rule-1',
description: 'Test rule 1',
resourceType: 'test-resource',
schema: z.tuple([]),
apply: jest.fn(),
toQuery: jest.fn(
(firstParam: string, secondParam: number) =>
@@ -36,6 +38,7 @@ const transformConditions = createConditionTransformer([
name: 'test-rule-2',
description: 'Test rule 2',
resourceType: 'test-resource',
schema: z.tuple([]),
apply: jest.fn(),
toQuery: jest.fn(
(firstParam: object) => `test-rule-2:${JSON.stringify(firstParam)}`,
@@ -21,6 +21,7 @@ import {
} from '@backstage/plugin-permission-common';
import express, { Express, Router } from 'express';
import request, { Response } from 'supertest';
import { z } from 'zod';
import { createPermissionIntegrationRouter } from './createPermissionIntegrationRouter';
import { createPermissionRule } from './createPermissionRule';
@@ -39,6 +40,7 @@ const testRule1 = createPermissionRule({
name: 'test-rule-1',
description: 'Test rule 1',
resourceType: 'test-resource',
schema: z.tuple([z.string(), z.number()]),
apply: (_resource: any, _firstParam: string, _secondParam: number) => true,
toQuery: (_firstParam: string, _secondParam: number) => ({}),
});
@@ -47,6 +49,7 @@ const testRule2 = createPermissionRule({
name: 'test-rule-2',
description: 'Test rule 2',
resourceType: 'test-resource',
schema: z.tuple([z.object({})]),
apply: (_resource: any, _firstParam: object) => false,
toQuery: (_firstParam: object) => ({}),
});
@@ -14,6 +14,7 @@
* limitations under the License.
*/
import { z } from 'zod';
import { createPermissionRule } from './createPermissionRule';
import {
createGetRule,
@@ -30,6 +31,7 @@ describe('permission integration utils', () => {
name: 'test-rule-1',
description: 'Test rule 1',
resourceType: 'test-resource',
schema: z.tuple([]),
apply: jest.fn(),
toQuery: jest.fn(),
});
@@ -38,6 +40,7 @@ describe('permission integration utils', () => {
name: 'test-rule-2',
description: 'Test rule 2',
resourceType: 'test-resource',
schema: z.tuple([]),
apply: jest.fn(),
toQuery: jest.fn(),
});
+6
View File
@@ -15,6 +15,7 @@
*/
import type { PermissionCriteria } from '@backstage/plugin-permission-common';
import { z } from 'zod';
/**
* A conditional rule that can be provided in an
@@ -42,6 +43,11 @@ export type PermissionRule<
description: string;
resourceType: TResourceType;
/**
* A ZodSchema that documents the parameters that this rule accepts.
*/
schema: z.ZodSchema<TParams>;
/**
* Apply this rule to a resource already loaded from a backing data source. The params are
* arguments supplied for the rule; for example, a rule could be `isOwner` with entityRefs as the