从经过身份验证的用户那里读取单个子条目

Read a single sub-entry from the authenticated user

我正在使用“查看器模式”来获取属于经过身份验证的用户的图像:

type Query {
  me: User! @auth
}

type User {
  name: String!
  images: [Image] @hasMany
}

我用:

{
  me {
    images {
      id
      url
    }
  }
}

这一切都很好,但是 returns 我是用户的所有图像。

我的问题是:如何通过 ID 从经过身份验证的用户那里获取单个图像?

我试过这个:

type User {
  name: String!
  images: [Image] @hasMany

  "Fetch image by its ID"
  image(id: ID @eq): Image @find
}

我用:

{
  me {
    image(id: 4) {
      id
      url
    }
  }
}

虽然这有效,但它会造成 巨大的安全性 问题。任何登录的人都可以访问任何用户的任何图像。

我尝试混合使用 @find@whereAuth 但我得到了这个

异常:

Call to a member function getRelationExistenceQuery() on null

想法?

我发现我做错了什么。 @whereAuth需要一个参数:

type User {
  name: String!
  images: [Image] @hasMany

  "Fetch image by its ID"
  image(id: ID @eq): Image @find @whereAuth(relation: "user")
}

或者,您可以将 @find 替换为 @where + @first:

type User {
  name: String!
  images: [Image] @hasMany

  "Fetch image by its ID"
  image(id: ID @where): Image @whereAuth(relation: "user") @first
}

当然,总有使用策略的替代方法。