mirror of
https://github.com/hasura/graphql-engine.git
synced 2024-12-14 17:02:49 +03:00
fix remote schema permissions with interfaces
PR-URL: https://github.com/hasura/graphql-engine-mono/pull/6417 GitOrigin-RevId: c3df729df040ea11ec61cf75536c8dec6b7cdbed
This commit is contained in:
parent
666f34d564
commit
e13ff5babe
@ -25,6 +25,7 @@ import {
|
|||||||
StringValueNode,
|
StringValueNode,
|
||||||
BooleanValueNode,
|
BooleanValueNode,
|
||||||
EnumValueNode,
|
EnumValueNode,
|
||||||
|
GraphQLInterfaceType,
|
||||||
} from 'graphql';
|
} from 'graphql';
|
||||||
import {
|
import {
|
||||||
isJsonString,
|
isJsonString,
|
||||||
@ -233,6 +234,7 @@ export const getType = (
|
|||||||
const inputObjectTypes: RemoteSchemaFields[] = [];
|
const inputObjectTypes: RemoteSchemaFields[] = [];
|
||||||
const objectTypes: RemoteSchemaFields[] = [];
|
const objectTypes: RemoteSchemaFields[] = [];
|
||||||
const unionTypes: RemoteSchemaFields[] = [];
|
const unionTypes: RemoteSchemaFields[] = [];
|
||||||
|
const interfaceTypes: RemoteSchemaFields[] = [];
|
||||||
|
|
||||||
Object.entries(introspectionSchemaFields).forEach(([key, value]: any) => {
|
Object.entries(introspectionSchemaFields).forEach(([key, value]: any) => {
|
||||||
if (
|
if (
|
||||||
@ -241,7 +243,8 @@ export const getType = (
|
|||||||
value instanceof GraphQLInputObjectType ||
|
value instanceof GraphQLInputObjectType ||
|
||||||
value instanceof GraphQLEnumType ||
|
value instanceof GraphQLEnumType ||
|
||||||
value instanceof GraphQLScalarType ||
|
value instanceof GraphQLScalarType ||
|
||||||
value instanceof GraphQLUnionType
|
value instanceof GraphQLUnionType ||
|
||||||
|
value instanceof GraphQLInterfaceType
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
return;
|
return;
|
||||||
@ -295,6 +298,13 @@ export const getType = (
|
|||||||
scalarTypes.push(type);
|
scalarTypes.push(type);
|
||||||
} else if (value instanceof GraphQLObjectType) {
|
} else if (value instanceof GraphQLObjectType) {
|
||||||
type.name = `type ${name}`;
|
type.name = `type ${name}`;
|
||||||
|
if (value.getInterfaces().length) {
|
||||||
|
const implementsString = value
|
||||||
|
.getInterfaces()
|
||||||
|
.map((i: any) => i.name)
|
||||||
|
.join('& ');
|
||||||
|
type.name = `type ${name} implements ${implementsString}`;
|
||||||
|
}
|
||||||
} else if (value instanceof GraphQLInputObjectType) {
|
} else if (value instanceof GraphQLInputObjectType) {
|
||||||
type.name = `input ${name}`;
|
type.name = `input ${name}`;
|
||||||
}
|
}
|
||||||
@ -389,6 +399,43 @@ export const getType = (
|
|||||||
type.children = childArray;
|
type.children = childArray;
|
||||||
unionTypes.push(type);
|
unionTypes.push(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (value instanceof GraphQLInterfaceType) {
|
||||||
|
let isFieldPresent = true;
|
||||||
|
let permissionsFieldVal: GraphQLFieldMap<any, any, any> = {};
|
||||||
|
|
||||||
|
// Check if the type is present in the permission schema coming from user.
|
||||||
|
if (permissionsSchema !== null && permissionsSchemaFields !== null) {
|
||||||
|
if (key in permissionsSchemaFields) {
|
||||||
|
permissionsFieldVal = permissionsSchemaFields[key].getFields();
|
||||||
|
} else {
|
||||||
|
isFieldPresent = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type.name = `interface ${name}`;
|
||||||
|
const childArray: CustomFieldType[] = [];
|
||||||
|
const fieldVal = value.getFields();
|
||||||
|
Object.entries(fieldVal).forEach(([k, v]) => {
|
||||||
|
let checked = false;
|
||||||
|
if (
|
||||||
|
permissionsSchema !== null &&
|
||||||
|
isFieldPresent &&
|
||||||
|
k in permissionsFieldVal
|
||||||
|
) {
|
||||||
|
checked = true;
|
||||||
|
}
|
||||||
|
const field: CustomFieldType = {
|
||||||
|
name: v.name,
|
||||||
|
checked,
|
||||||
|
return: v.type.toString(),
|
||||||
|
};
|
||||||
|
childArray.push(field);
|
||||||
|
});
|
||||||
|
|
||||||
|
type.children = childArray;
|
||||||
|
interfaceTypes.push(type);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return [
|
return [
|
||||||
...objectTypes,
|
...objectTypes,
|
||||||
@ -396,6 +443,7 @@ export const getType = (
|
|||||||
...unionTypes,
|
...unionTypes,
|
||||||
...enumTypes,
|
...enumTypes,
|
||||||
...scalarTypes,
|
...scalarTypes,
|
||||||
|
...interfaceTypes,
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user