контроль конфиденциальности сервера apollo graphql после получения данных - PullRequest
0 голосов
/ 10 марта 2019

Итак, я не знаю, как справиться с этим в сервисе graphql.
Я переношу сервис из rest - express api в apollo api.
Моя текущая схема Монго выглядит следующим образом:

const PostSchema = new mongoose.Schema({
  title: { type: String, required: true },
  body: { type: String },
  uid: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: true },
  privacy: { type: String, enum: ['everyone','followers','onlyme'], default: 'everyone' },
});

const UserSchema = new mongoose.Schema({
  name: { type: String, required: true },
  followers: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }],
});

в экспресс-среде я использовал, чтобы получать сообщения с заполненным пользователем, затем применял функцию контроля конфиденциальности на основе подписчиков пользователя.

, но в apollo я не могу получить доступ к сообщению после его заполнения.где я могу применить директиву или что-то еще после того, как поля сообщений будут разрешены?

схема graphql:

type User {
    _id: ID!  
    name: String
    followers: [ID]
}

type Post {
    _id: ID!  
    title: String!
    body:String
    uid :User @privacy
}

extend type Query{
    post(_id: String):Post
    posts:[Post]

}

преобразователь сообщений:

{
    Query: {
    post: (p, a, ctx, info) => {
      return ctx.modules.post.getPost(a._id)
    }
  },
  Post: {
    uid: (p, a, ctx, info) => {
      return ctx.modules.user.getUser(p.uid);
    }
  },
}
...