From bba88bdb5efe6b41c4c9d37e66338d6c4b298439 Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Fri, 5 Apr 2024 16:34:37 +0200 Subject: [PATCH] Fix Policy view for Project and Target (#4435) --- .../api/src/modules/policy/module.graphql.ts | 1 + .../providers/schema-policy.provider.ts | 9 +++++++ .../api/src/modules/policy/resolvers.ts | 5 ++++ .../[projectId]/view/policy.tsx | 26 +++++++++---------- 4 files changed, 28 insertions(+), 13 deletions(-) diff --git a/packages/services/api/src/modules/policy/module.graphql.ts b/packages/services/api/src/modules/policy/module.graphql.ts index 4084b5cd2..b1def1f0a 100644 --- a/packages/services/api/src/modules/policy/module.graphql.ts +++ b/packages/services/api/src/modules/policy/module.graphql.ts @@ -81,6 +81,7 @@ export default gql` extend type Project { schemaPolicy: SchemaPolicy + parentSchemaPolicy: SchemaPolicy } extend type Target { diff --git a/packages/services/api/src/modules/policy/providers/schema-policy.provider.ts b/packages/services/api/src/modules/policy/providers/schema-policy.provider.ts index 608e39401..4274be0ad 100644 --- a/packages/services/api/src/modules/policy/providers/schema-policy.provider.ts +++ b/packages/services/api/src/modules/policy/providers/schema-policy.provider.ts @@ -176,6 +176,15 @@ export class SchemaPolicyProvider { return this.storage.getSchemaPolicyForOrganization(selector.organization); } + async getOrganizationPolicyForProject(selector: ProjectSelector) { + await this.authManager.ensureProjectAccess({ + ...selector, + scope: ProjectAccessScope.SETTINGS, + }); + + return this.storage.getSchemaPolicyForOrganization(selector.organization); + } + async getProjectPolicy(selector: ProjectSelector) { await this.authManager.ensureProjectAccess({ ...selector, diff --git a/packages/services/api/src/modules/policy/resolvers.ts b/packages/services/api/src/modules/policy/resolvers.ts index e4f35b20f..d391cf7f2 100644 --- a/packages/services/api/src/modules/policy/resolvers.ts +++ b/packages/services/api/src/modules/policy/resolvers.ts @@ -33,6 +33,11 @@ export const resolvers: PolicyModule.Resolvers = { project: project.id, organization: project.orgId, }), + parentSchemaPolicy: async (project, _, { injector }) => + injector.get(SchemaPolicyProvider).getOrganizationPolicyForProject({ + project: project.id, + organization: project.orgId, + }), }, Target: { schemaPolicy: async (target, _, { injector }) => { diff --git a/packages/web/app/pages/[organizationId]/[projectId]/view/policy.tsx b/packages/web/app/pages/[organizationId]/[projectId]/view/policy.tsx index 106adb576..a022dccba 100644 --- a/packages/web/app/pages/[organizationId]/[projectId]/view/policy.tsx +++ b/packages/web/app/pages/[organizationId]/[projectId]/view/policy.tsx @@ -17,16 +17,6 @@ const ProjectPolicyPageQuery = graphql(` organization(selector: { organization: $organizationId }) { organization { id - schemaPolicy { - id - updatedAt - allowOverrides - rules { - rule { - id - } - } - } me { id ...CanAccessProject_MemberFragment @@ -43,6 +33,16 @@ const ProjectPolicyPageQuery = graphql(` updatedAt ...PolicySettings_SchemaPolicyFragment } + parentSchemaPolicy { + id + updatedAt + allowOverrides + rules { + rule { + id + } + } + } } organizations { ...ProjectLayout_OrganizationConnectionFragment @@ -160,11 +160,11 @@ function ProjectPolicyContent() { )} - {currentOrganization.schemaPolicy === null || - currentOrganization.schemaPolicy?.allowOverrides ? ( + {currentProject.parentSchemaPolicy === null || + currentProject.parentSchemaPolicy?.allowOverrides ? ( r.rule.id)} + rulesInParent={currentProject.parentSchemaPolicy?.rules.map(r => r.rule.id)} error={ mutation.error?.message || mutation.data?.updateSchemaPolicyForProject.error?.message