如何访问节点定义的根值或上下文

How to access rootValue or context for nodedefination

我们可以检查 rootValue 或上下文来确定请求对 graphql 请求的角色权限。 使用 graphql-relay-js 时,我们如何检查 nodeDefination 的权限(通过 'node' 请求)?

您应该能够使用 contextrootValue 中的值访问您的权限,因为两者都可用于解析器函数:

export const {nodeField, nodeInterface} = nodeDefinitions(
  function resolveObjectFromID(globalId, context, {rootValue}) {
    const {type, id} = fromGlobalId(globalId);

    // Optionally perform auth logic here with either context or rootValue...

    // Then proceed with loading as usually; here, for example, using
    // DataLoader.
    const loader = rootValue.loaders[type];
    return (loader && loader.load(id)) || null;
  },
  function resolveGraphQLTypeFromObject(object) {
    return registeredTypes[object.constructor.name] || null;
  },
);

请注意,context 参数是在 graphql v0.5.0 中添加的;在此之前,您只能使用 rootValue。另请注意,您可以在查询中的任何级别执行权限检查,而不仅仅是 node 级别,因为 contextrootValue 都会一直向下传播。