Hasura如何基于其他表字段值配置自定义行选择权限
Hasura v1.3.2 跨表行级权限配置解决方案
你遇到的问题本质是_ceq运算符仅支持同表的两列比较,在_exists子句的_where上下文内默认只能选择子查询表(此处为tableA)的列,无法直接引用外层待配置权限表(此处为tableB)的列,可通过以下两种方案解决:
方案一:通过关联关系配置(推荐)
该方案符合Hasura的设计逻辑,配置更简单不易出错:
- 首先为两张表建立关联:给tableB的keyB字段添加指向tableA.keyA的外键约束,Hasura会自动识别生成对象关系;如果不方便加外键,也可以在Hasura控制台的tableB「Relationships」页面手动创建对象关系,映射规则为
keyB → tableA.keyA,关系名可设为tableA。 - 配置tableB的行级选择权限时,直接使用关联关系写规则即可:
{ "tableA": { "approved": { "_eq": true } } }
方案二:直接使用_exists运算符配置
如果不需要/无法建立表关联,可以调整_exists规则的写法,通过_column表达式引用外层tableB的列,正确规则如下:
{ "_exists": { "_table": { "schema": "my-schema", "name": "tableA" }, "_where": { "_and":[ {"keyA": {"_eq": {"_column": "keyB"}}}, {"approved": {"_eq": true }} ] } } }
注意需将上述规则中的schema名替换为你实际使用的schema名称,避免拼写错误。
内容的提问来源于stack exchange,提问作者rze
相关产品推荐
相关产品推荐

