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

如何在Amplify GraphQL API中限制单用户可创建的记录数量

问题解答

核心结论

不能仅通过GraphQL Schema定义实现单用户创建记录条数限制,也没有原生的DynamoDB配置项支持该能力,需要通过附加后端校验逻辑实现强制限制,以下是两种适配Amplify生态的可行方案:

方案1:前置Lambda校验(适配绝大多数普通场景)

这是实现成本最低的方案,适合并发量不高的业务:

  1. 给Product对应的DynamoDB表新增owner字段的全局二级索引,用于快速统计单个用户的记录总数
  2. 在Amplify项目中新增一个Lambda校验函数,逻辑如下:
    • 从GraphQL请求上下文中提取当前Cognito用户的owner标识
    • 调用DynamoDB接口查询该用户已创建的Product记录总数
    • 若总数≥100,直接返回拒绝请求的报错;若<100则放行请求
  3. 将该Lambda函数关联到createProduct mutation的前置Resolver,所有创建Product的请求都会先经过该函数校验,通过后才会写入数据库

方案2:计数表+DynamoDB事务(高并发场景强一致限制)

如果业务存在高并发创建请求的场景,方案1的查询和写入存在时间差,极端情况下可能出现超限,可以用事务实现绝对严格的限制:

  1. 新建一张UserProductCount DynamoDB表,主键为用户的owner标识,存储每个用户已创建的Product数量,初始值为0
  2. 替换createProduct的默认Resolver,改为DynamoDB事务逻辑:
    • 条件检查UserProductCount表中对应用户的计数值 < 100
    • 同时执行两个操作:写入新的Product记录、将对应用户的计数值+1
    • 只要条件检查不通过,事务就会整体失败,直接返回报错,完全避免超限问题

两种方案都不会被前端绕过,所有API请求都会执行后端校验,符合安全要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 11:54:04