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

Hasura引擎匿名用户权限配置:订单插入与ID返回问题咨询

问题1解决方案

核心思路是通过反向关系的行级插入检查,限制匿名用户仅能在创建订单的嵌套场景下插入地址数据,无法单独插入:

  1. 先在order_address表创建反向一对一关系:命名为bind_order,关联规则为 order_address.id = order.address_id
  2. 给匿名角色配置order_address的插入权限:
    • 字段权限:仅开放street、number两个可提交字段,自动生成的id字段无需开放
    • 插入行检查规则:添加条件{"bind_order":{"id":{"_is_null":false}}}
  3. 管理员角色的order_address插入权限不添加上述检查规则,保留单独插入地址的能力

原理:插入操作的行级检查会校验插入完成后的数据是否符合规则。如果匿名用户单独调用insert_order_address插入地址,插入完成后没有关联的订单绑定,检查不通过,插入失败;只有通过insert_order嵌套插入地址时,订单和地址会在同一个事务内完成绑定,检查规则通过,插入成功。


问题2解决方案

有两种成熟方案可选,按需取用:

方案1(适合仅需创建时返回ID,后续无需查询的场景)

直接给匿名角色开放order表id字段的查询权限,同时增加两个限制:

  • 禁用匿名角色的order表聚合查询权限
  • 给匿名角色的order表查询权限添加行级限制:每次最多返回1条数据

因为订单ID是UUID格式,全局唯一且不可暴力枚举,用户没有具体ID值的情况下根本无法检索到其他订单的信息,也无法批量拉取全量订单ID,完全满足安全要求。

方案2(适合需要后续支持用户查询订单状态的场景)

  1. 给order表新增access_key字段,类型为UUID,默认值设为gen_random_uuid(),设置该字段不可修改
  2. 给匿名角色的order表查询权限添加行级检查规则:{"access_key":{"_eq":"X-Hasura-Access-Key"}}
  3. 匿名用户创建订单时,在insert_order的返回字段中同时返回id和access_key
  4. 后续用户查询订单时,需要在请求头中携带自己的X-Hasura-Access-Key,仅能查到自己对应的订单信息,完全不会泄露其他订单的ID和数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 16:45:04