首页 > 解决方案 > GraphQL | Mongoose - 文档的所有权和权限

问题描述

我最近一直在尝试开发 GraphQL 和 Mongoose API。我以为我会从身份验证和权限开始,但在后者遇到了一些问题。

我有一个存储我的用户的猫鼬集合(用户)。猫鼬模式看起来像这样:

const { composeMongoose } = require("graphql-compose-mongoose");

const User = new Schema(
  {
    name: { type: String, required: true },
    email: { type: String, required: true },
    // [...]
  },
);

module.exports = {
  User: User,
  UserSchema: mongoose.model("users", User),
  UserTC: composeMongoose(mongoose.model("users", User)),
};

我有另一个看起来像这样的集合(成分):

const Ingredient = new Schema(
  {
    name: String,
    ownerId: String,
  }
);

module.exports = {
  Ingredient: Ingredient,
  IngredientSchema: mongoose.model("ingredients", Ingredient),
  IngredientTC: composeMongoose(mongoose.model("ingredients", Ingredient)),
};

我一直在尝试使用 graphql-compose 来简化为应用程序的 GraphQL 部分创建模式。除此之外,我还尝试制作中间件来检查 ownerId 字段是否等于存储在我的上下文中的用户。我已成功获取用户,但无法获取文档并检查文档本身。

const applyResolver = (resolver) => {
  var tmpResolver;
  if (typeof resolver === "object") {
    if (typeof resolver.permission === "function") {
      tmpResolver = resolver.resolver.wrapResolve((next) => (rp) => {
        resolver.permission(rp); //This function is meant to throw if an error happens.

        return next(rp);
      });
    } else {
      tmpResolver = resolver.resolver;
    }
  } else {
    tmpResolver = resolver;
  }
  return tmpResolver;
};

我的问题是我无法将文档传递给权限函数,从而检查参数是否匹配。

有什么方法可以用 graphql-compose 做到这一点,还是我必须开始寻找另一种方法来做到这一点?

如果缺少任何信息,请告诉我。

标签: mongoosegraphqlexpress-graphqlgraphql-composegraphql-compose-mongoose

解决方案


推荐阅读