diff --git a/.changeset/kind-bees-suffer.md b/.changeset/kind-bees-suffer.md index 41c9874590..18e8afa947 100644 --- a/.changeset/kind-bees-suffer.md +++ b/.changeset/kind-bees-suffer.md @@ -20,7 +20,7 @@ The API has now changed to expect the parameters as a single object ```ts createPermissionRule({ - schema: z.object({ + paramSchema: z.object({ foo: z.string().describe('Foo value to match'), bar: z.string().describe('Bar value to match'), }), diff --git a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts index 29ce67ad53..19a4423846 100644 --- a/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts +++ b/plugins/catalog-backend/src/permissions/rules/createPropertyRule.ts @@ -24,7 +24,7 @@ export const createPropertyRule = (propertyType: 'metadata' | 'spec') => name: `HAS_${propertyType.toUpperCase()}`, description: `Allow entities which have the specified ${propertyType} subfield.`, resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ key: z .string() .describe(`Property within the entities ${propertyType} to match on`), diff --git a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts index c8450f3d08..c24620f41c 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasAnnotation.ts @@ -31,7 +31,7 @@ export const hasAnnotation = createCatalogPermissionRule({ description: 'Allow entities which are annotated with the specified annotation', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ annotation: z.string().describe('Name of the annotation to match on'), value: z .string() diff --git a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts index 6b7b9d9da0..376534ca6f 100644 --- a/plugins/catalog-backend/src/permissions/rules/hasLabel.ts +++ b/plugins/catalog-backend/src/permissions/rules/hasLabel.ts @@ -27,7 +27,7 @@ export const hasLabel = createCatalogPermissionRule({ name: 'HAS_LABEL', description: 'Allow entities which have the specified label metadata.', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ label: z.string().describe('Name of the label to match one'), }), apply: (resource, { label }) => diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts index d64b357d9f..eee7a790b2 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityKind.ts @@ -27,7 +27,7 @@ export const isEntityKind = createCatalogPermissionRule({ name: 'IS_ENTITY_KIND', description: 'Allow entities with the specified kind', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ kinds: z .array(z.string()) .describe('List of kinds to match at least one of'), diff --git a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts index 824e5e9ca6..c3bfff5c2e 100644 --- a/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts +++ b/plugins/catalog-backend/src/permissions/rules/isEntityOwner.ts @@ -29,7 +29,7 @@ export const isEntityOwner = createCatalogPermissionRule({ name: 'IS_ENTITY_OWNER', description: 'Allow entities owned by the current user', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ claims: z .array(z.string()) .describe( diff --git a/plugins/catalog-backend/src/service/createRouter.test.ts b/plugins/catalog-backend/src/service/createRouter.test.ts index 088e6c71e2..f383df7364 100644 --- a/plugins/catalog-backend/src/service/createRouter.test.ts +++ b/plugins/catalog-backend/src/service/createRouter.test.ts @@ -696,7 +696,7 @@ describe('NextRouter permissioning', () => { name: 'FAKE_RULE', description: 'fake rule', resourceType: RESOURCE_TYPE_CATALOG_ENTITY, - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), }), apply: () => true, diff --git a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts index 8cbeeaebd9..80782848e7 100644 --- a/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts +++ b/plugins/permission-backend/src/service/PermissionIntegrationClient.test.ts @@ -284,7 +284,7 @@ describe('PermissionIntegrationClient', () => { name: 'RULE_1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ input: z.enum(['yes', 'no']), }), apply: (_resource, { input }) => input === 'yes', @@ -297,7 +297,7 @@ describe('PermissionIntegrationClient', () => { description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ input: z.enum(['yes', 'no']), }), apply: (_resource, { input }) => input === 'yes', diff --git a/plugins/permission-node/src/integration/createConditionExports.test.ts b/plugins/permission-node/src/integration/createConditionExports.test.ts index 59639f5119..424b3c3c24 100644 --- a/plugins/permission-node/src/integration/createConditionExports.test.ts +++ b/plugins/permission-node/src/integration/createConditionExports.test.ts @@ -31,7 +31,7 @@ const testIntegration = () => name: 'testRule1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), bar: z.number(), }), @@ -45,7 +45,7 @@ const testIntegration = () => name: 'testRule2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), }), apply: (_resource: any) => false, diff --git a/plugins/permission-node/src/integration/createConditionFactory.test.ts b/plugins/permission-node/src/integration/createConditionFactory.test.ts index 191688f0dd..2b3acff342 100644 --- a/plugins/permission-node/src/integration/createConditionFactory.test.ts +++ b/plugins/permission-node/src/integration/createConditionFactory.test.ts @@ -23,7 +23,7 @@ describe('createConditionFactory', () => { name: 'test-rule', description: 'test-description', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), }), apply: (_resource, _params) => true, diff --git a/plugins/permission-node/src/integration/createConditionTransformer.test.ts b/plugins/permission-node/src/integration/createConditionTransformer.test.ts index 0544ff3ef8..a5507f0b44 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.test.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.test.ts @@ -27,7 +27,7 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), bar: z.number(), }), @@ -38,7 +38,7 @@ const transformConditions = createConditionTransformer([ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), }), apply: jest.fn(), diff --git a/plugins/permission-node/src/integration/createConditionTransformer.ts b/plugins/permission-node/src/integration/createConditionTransformer.ts index afbd4a9316..dc0b11e90e 100644 --- a/plugins/permission-node/src/integration/createConditionTransformer.ts +++ b/plugins/permission-node/src/integration/createConditionTransformer.ts @@ -47,9 +47,9 @@ const mapConditions = ( } const rule = getRule(criteria.rule); - const result = rule.schema.safeParse(criteria.params); + const result = rule.paramsSchema.safeParse(criteria.params); - if (rule.schema && !result.success) { + if (rule.paramsSchema && !result.success) { throw new InputError(`Parameters to rule are invalid`, result.error); } diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts index adfa57b863..55d4d5f4cf 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.test.ts @@ -40,7 +40,7 @@ const testRule1 = createPermissionRule({ name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string(), bar: z.number().describe('bar'), }), @@ -52,7 +52,7 @@ const testRule2 = createPermissionRule({ name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({ + paramsSchema: z.object({ foo: z.string().describe('foo'), }), apply: (_resource: any, _foo) => false, @@ -603,7 +603,7 @@ describe('createPermissionIntegrationRouter', () => { name: testRule1.name, description: testRule1.description, resourceType: testRule1.resourceType, - schema: { + paramsSchema: { $schema: 'http://json-schema.org/draft-07/schema#', additionalProperties: false, properties: { @@ -623,7 +623,7 @@ describe('createPermissionIntegrationRouter', () => { name: testRule2.name, description: testRule2.description, resourceType: testRule2.resourceType, - schema: { + paramsSchema: { $schema: 'http://json-schema.org/draft-07/schema#', additionalProperties: false, properties: { diff --git a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts index 4f98597e6c..c2d99ac4a4 100644 --- a/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts +++ b/plugins/permission-node/src/integration/createPermissionIntegrationRouter.ts @@ -127,9 +127,9 @@ const applyConditions = ( } const rule = getRule(criteria.rule); - const result = rule.schema.safeParse(criteria.params); + const result = rule.paramsSchema.safeParse(criteria.params); - if (rule.schema && !result.success) { + if (rule.paramsSchema && !result.success) { throw new InputError(`Parameters to rule are invalid`, result.error); } @@ -195,7 +195,7 @@ export const createPermissionIntegrationRouter = < name: rule.name, description: rule.description, resourceType: rule.resourceType, - schema: zodToJsonSchema(rule.schema), + paramsSchema: zodToJsonSchema(rule.paramsSchema), })); return res.json({ permissions, rules: serializableRules }); diff --git a/plugins/permission-node/src/integration/util.test.ts b/plugins/permission-node/src/integration/util.test.ts index 924ab30757..b1961ae532 100644 --- a/plugins/permission-node/src/integration/util.test.ts +++ b/plugins/permission-node/src/integration/util.test.ts @@ -31,7 +31,7 @@ describe('permission integration utils', () => { name: 'test-rule-1', description: 'Test rule 1', resourceType: 'test-resource', - schema: z.object({}), + paramsSchema: z.object({}), apply: jest.fn(), toQuery: jest.fn(), }); @@ -40,7 +40,7 @@ describe('permission integration utils', () => { name: 'test-rule-2', description: 'Test rule 2', resourceType: 'test-resource', - schema: z.object({}), + paramsSchema: z.object({}), apply: jest.fn(), toQuery: jest.fn(), }); diff --git a/plugins/permission-node/src/types.ts b/plugins/permission-node/src/types.ts index b16c0cac32..df21889fb9 100644 --- a/plugins/permission-node/src/types.ts +++ b/plugins/permission-node/src/types.ts @@ -66,7 +66,7 @@ export type PermissionRule< /** * A ZodSchema that documents the parameters that this rule accepts. */ - schema: PermissionRuleSchema; + paramsSchema: PermissionRuleSchema; /** * Apply this rule to a resource already loaded from a backing data source. The params are diff --git a/plugins/playlist-backend/src/permissions/rules.ts b/plugins/playlist-backend/src/permissions/rules.ts index bebb7905b4..cd6711befb 100644 --- a/plugins/playlist-backend/src/permissions/rules.ts +++ b/plugins/playlist-backend/src/permissions/rules.ts @@ -33,7 +33,7 @@ const isOwner = createPlaylistPermissionRule({ name: 'IS_OWNER', description: 'Should allow only if the playlist belongs to the user', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - schema: z.object({ + paramsSchema: z.object({ owners: z.array(z.string()).describe('List of owner entity refs'), }), apply: (list: PlaylistMetadata, { owners }) => owners.includes(list.owner), @@ -47,7 +47,7 @@ const isPublic = createPlaylistPermissionRule({ name: 'IS_PUBLIC', description: 'Should allow only if the playlist is public', resourceType: PLAYLIST_LIST_RESOURCE_TYPE, - schema: z.object({}), + paramsSchema: z.object({}), apply: (list: PlaylistMetadata) => list.public, toQuery: () => ({ key: 'public', values: [true] }), });