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