1

将被突变更改的对象包含一个permissions数组,该数组包含user由 auserIdwrite权限布尔值组成的对象。如果userId列表中存在用户,则该用户对该对象具有读取权限。如果write设置为 true,则用户也具有写入权限。

从突变的角度来看,这使得修改对象更容易,但它使处理订阅变得更加困难,因为我无权访问在订阅创建时更新的对象。因此,我无法确保用户只有在拥有适当权限的情况下才能获得对象的更新。

我认为这没有什么区别(因为我无法在客户端安全地处理这个问题),但我正在构建一个 React Web 客户端。

有没有可行的方法解决这个问题?

4

1 回答 1

2

一种可能的解决方案是设置一个订阅所有新突变的服务器端作业。此服务器端侦听器将接收每个新突变,查看权限列表,并使用 None 数据源解析器发布给授权用户。用户将只被允许使用他们的用户 ID 订阅订阅。

架构看起来像这样:

type Object {
  permissions: [User]
  //.. Other fields
}

type User {
  userId: ID!
  write: Boolean
}

// The server listener will populate this
type PublishPayload {
  userId: ID!
  objectToPublish: Object
}

type Mutation {
  // The original mutation
  updateObject(): Object

  // The server-side listener will use this to publish. Attach a None Resolver to it.
  publishToUser(userId: ID!): PublishPayload
}

type Subscription {
  // This subscription is used by the server to listen to all updateObject mutations
  serverSubscription(): Object
  @aws_subscribe(mutations:["updateObject"])

  // This subscription is used by the users. 
  // You would add a resolver to it that fails authorization if they try to subscribe to a different user.
  userSubscription(userId: ID!): PublishPayload
  @aws_subscribe(mutations:["publishToUser"])

//.. More schema

希望这可以帮助!

于 2018-10-22T22:07:39.590 回答