【问题标题】:How to check permissions of an entity on create in appsync如何在 appsync 中检查创建实体的权限
【发布时间】:2019-07-13 00:29:25
【问题描述】:

抱歉,标题不明确。但是,我很难描述它。

我正在使用aws-appsyncaws cognito 进行身份验证。

我已按照有关 @auth 注释的放大文档来处理突变和查询的权限。

这是我的架构示例。 用户可以创建条目并与他人共享。但是,他们应该只阅读该条目,而不应该有编辑它的权限。

一个条目也有多个注释。 (以及更多字段)

type Entry @model @versioned @auth (rules: [
  { allow: owner },
  { allow: owner, ownerField: "shared", queries: [get, list], mutations: []}
])  @searchable {
  id: ID!
  date: AWSDate
  updated_at: AWSDateTime
  text: String
  notes: [Note] @connection(name: "EntryNotes")
  shared: [String]!
}

这是注释

type Note @model @versioned @auth (rules: [{ allow: owner }]) {
  id: ID!
  text: String
  track: Track!
  diary: DiaryEntry @connection(name: "EntryNotes")
}

到目前为止,这工作正常。但问题是Note 连接。 因为如果你创建一个笔记,你会像这样创建它:

mutation makeNote {
  createNote (input: {
    text: "Hello there!"
    noteEntryId: "444c80ee-6fd9-4267-b371-c2ed4a3ccda4"
  }) {
    id
    text
  }
}

现在的问题是,您可以为您无权访问的条目创建注释。如果您以某种方式找出他们拥有的 id。

有没有办法在创建笔记之前检查您是否有权限访问该条目?

【问题讨论】:

    标签: amazon-dynamodb graphql aws-appsync


    【解决方案1】:

    目前,最好的方法是通过 Amplify CLI 中的自定义解析器。具体来说,您可以使用 AppSync 管道解析器在创建注释之前执行授权检查。您的管道解析器将包含两个功能。第一个将查找条目并将所有者与 $ctx.identity 进行比较。第二个函数将处理将记录写入 DynamoDB。您可以使用build/resolvers/Mutation.createNote.re(q|s).vtl 中的相同逻辑来实现第二个功能,方法是将其复制到顶级resolvers/ 目录,然后从您的自定义资源中引用它。复制逻辑后,您需要通过将 @model 更改为 @model(mutations: { update: "updateNote", delete: "deleteNote" }) 来禁用默认的 createNote 突变。

    有关如何设置自定义解析器的更多信息,请参阅https://aws-amplify.github.io/docs/cli/graphql#add-a-custom-resolver-that-targets-a-dynamodb-table-from-model。有关管道解析器的更多信息(与放大文档中的示例略有不同),请参阅https://docs.aws.amazon.com/appsync/latest/devguide/pipeline-resolvers.html。另请参阅 AppSync https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-reference-appsync.html 的 CloudFormation 参考文档。

    展望未来,我们正在设计一种允许您定义跨 @connections 的身份验证规则的设计。完成后,它将自动配置此模式,但尚未确定发布日期。

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-10
      • 2021-04-14
      • 1970-01-01
      • 2021-03-04
      相关资源
      最近更新 更多