首页 > 解决方案 > 使用 Amplify GraphQL 进行字段级授权

问题描述

我在整理字段级授权时遇到问题。我希望模型中的特定字段是只读的。

这是架构的简化版本:

type Thing
  @model
  @auth(
    rules: [
      {
        allow: groups
        groups: ["Admins"]
        operations: [read, create, update]
      }
      { allow: private, operations: [read]}
    ]
  ) {
  id: ID!
  foo: String
  bar: String
  baz: ID
    @auth(
      rules: [
        { allow: groups, groups: ["Admins"], operations: [read] }
      ]
    )
}

我的期望是所有用户都可以阅读foo,barbaz, 但只有其中的成员Admins才能更新fooand bar, 但即使是 Admins 也不允许更新baz。但是,我发现管理员仍然可以写信给baz,这是我不想要的。

我认为字段级规则优先于模型级规则。

这样的事情可能吗?

标签: graphqlaws-appsyncamplify

解决方案


从文档来看,这似乎是可能的:

当一个授权规则被添加到一个字段时,它将严格定义应用于该字段的授权规则。字段级授权规则不继承模型级授权规则。意思是,仅应用指定的字段级授权规则。

如果您添加字段级规则,模型似乎会忽略您在模型级别拥有的任何授权。这里有几个示例可供参考:https ://docs.amplify.aws/cli-legacy/graphql-transformer/auth/#field-level-authorization

至于您看到的问题,不确定,似乎您已正确设置它,也许这里还有另一个问题?


推荐阅读