контроль конфиденциальности сервера apollo graphql после извлечения данных

#node.js #express #graphql #apollo-server #mern

#node.js #экспресс #graphql #apollo-server #mern

Вопрос:

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

 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' }],
});
  

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

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

схема 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);
    }
  },
}
  

Комментарии:

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

2. да, потому что у post resolver нет заполненного uid поля, которое требуется функции конфиденциальности, если я не извлеку его дважды в post resolver и в uid resolver