保护GraphQL查询中的字段
创始人
2024-11-23 23:00:40
0

为了保护GraphQL查询中的字段,可以使用Schema Directives来实现对字段的访问控制。下面是一个针对GraphQL的Schema Directives示例,用于保护字段不被查询:

import { SchemaDirectiveVisitor } from 'graphql-tools';
import { defaultFieldResolver } from 'graphql';

class ProtectFieldsDirective extends SchemaDirectiveVisitor {
  visitFieldDefinition(field) {
    const { resolve = defaultFieldResolver } = field;

    field.resolve = async function(...args) {
      const [, , context] = args;

      if (!context.user) { //此处可以加上自己的业务逻辑判断如某个用户是否有权限访问
        throw new Error(`Unauthorized access to field ${field.name}`);
      }

      return resolve.apply(this, args);
    };
  }
}

然后在构建Schema时使用该Directive:

import { makeExecutableSchema } from 'graphql-tools';

const typeDefs = `
  type User {
    id: ID!
    name: String
    email: String @protectFields
  }

  type Query {
    user(id: ID!): User
  }

  schema {
    query: Query
  }
`;

const resolvers = {
  User: {
    email(user, args, context) {
      return user.email; //仅当context.user存在时才会返回query中的email字段
    }
  },
  Query: {
    user(_, { id }) {
      return getUserById(id);
    }
  }
};

export const schema = makeExecutableSchema({
  typeDefs,
  resolvers,
  schemaDirectives: {
    protectFields: ProtectFieldsDirective
  }
});

相关内容

热门资讯

第十胜率!熊猫麻将系统规律(辅... 您好,熊猫麻将系统规律这款游戏可以开挂的,确实是有挂的,需要了解加微【485275054】很多玩家在...
第九个AI!德扑分析软件(智能... 第九个AI!德扑分析软件(智能机器人平台安装)透视辅助(有挂总结)-哔哩哔哩;1.德扑分析 ai辅助...
第9个技巧!微扑克智能助手(辅... 第9个技巧!微扑克智能助手(辅助工具)透视辅助(真实有挂)-哔哩哔哩 科技详细教程;75744690...
3免费(德扑之星功能)外挂透明... 3免费(德扑之星功能)外挂透明挂辅助挂(辅助挂)AI教程(有挂实锤)-哔哩哔哩;是一款可以让一直输的...
第二个ai插件!德扑之星 ai... 第二个ai插件!德扑之星 ai软件(作弊)透视辅助(揭秘有挂)-哔哩哔哩是一款可以让一直输的玩家,快...
第二模拟器!大赢家跑得快辅助(... 第二模拟器!大赢家跑得快辅助(透视)太坑了其实真的有挂(讲解有挂)-哔哩哔哩是一款可以让一直输的玩家...
九技巧(aapoker安卓版)... 九技巧(aapoker安卓版)外挂透明挂辅助挂(透视)黑科技教程(有挂分析)-哔哩哔哩;wpk透视辅...
4个外挂!微扑克ai技术(wp... 4个外挂!微扑克ai技术(wpk俱乐部)辅助透视(有挂功能)-哔哩哔哩;值得一提的是,wpk俱乐部计...
第一个测试!德扑之星操作(人工... 第一个测试!德扑之星操作(人工智能)透视辅助(有挂规律)-哔哩哔哩1、不需要AI权限,帮助你快速的进...
第三安卓版!中至乐平麻将老是输... 第三安卓版!中至乐平麻将老是输怎么办(透视)太坑了原来真的有挂(有挂方法)-哔哩哔哩是一款可以让一直...