You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Amplify GraphQL字段级授权设置模型特定字段为只读

问题根因

Amplify GraphQL Transformer 采用白名单叠加的授权逻辑:

  • 模型级@auth规则首先控制当前身份是否有权限调用对应模型的增删改查操作
  • 字段级@auth规则是在模型级权限生效的基础上,进一步限制对单个字段的访问、写入权限

你当前的写法存在两个问题:

  1. baz字段的字段级规则仅给了Admins组读权限,普通私有用户实际上无法读取baz,不符合你“所有用户都可读取baz”的预期
  2. 你没有显式限制baz字段的create、update操作权限,模型级给Admins开放了create、update操作权限后,Admins调用变更操作时默认可以写入baz字段,因为没有字段级规则拦截该操作。

解决方案

你可以通过调整字段级授权规则实现baz字段全局只读的需求,修改后的schema如下:

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] }
        { allow: private, operations: [read] }
      ]
    )
}

调整后规则逻辑:

  • 所有登录用户都可以读取baz字段,符合读权限预期
  • 没有任何角色拥有baz字段的create、update操作权限,即便是Admins组成员调用createThing、updateThing时传入baz参数,也会触发授权错误,无法写入该字段
  • foo、bar字段没有额外字段级规则限制,继承模型级权限,Admins可写、所有登录用户可读,符合预期。

注意事项

如果使用的是GraphQL Transformer v1版本,字段级授权逻辑存在差异,建议升级到v2版本后使用上述配置。

内容的提问来源于stack exchange,提问作者Luke Seemann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 11:30:03