Hasura权限配置咨询:如何将权限规则中的_eq值关联至另一数据表的ID字段
解决Hasura权限配置中关联表字段的问题
我懂你现在的困扰——你想让用户只能访问被分配给自己的项目,用_exists操作符关联assigned_item和item表,但不知道怎么把规则里的feed_item_id和目标项目的ID动态关联起来对吧?
先理清楚核心逻辑:如果你的需求是用户只能查询到自己被分配的item(项目),那权限规则应该配置在item表的「Select权限」里,而不是assigned_item表上。下面是正确的配置方式:
{ "_exists": { "_table": { "name": "assigned_item", "schema": "public" }, "_where": { "_and": [ { "userid": { "_eq": "X-Hasura-User-Id" } }, { "feed_item_id": { "_eq": "{{ item.id }}" } } ] } } }
关键改动说明:
- 用
{{ item.id }}替代了原来的固定值XXX,这是Hasura的模板变量语法,用来引用当前item表的id字段,这样Hasura就能自动把assigned_item里的feed_item_id和正在查询的项目ID做匹配。 - 这个规则的逻辑是:只有当
assigned_item表中存在一条记录,满足「用户ID等于当前请求的X-Hasura-User-Id」且「关联的项目ID等于当前查询的item的ID」时,用户才能看到这条项目记录。
如果你的需求其实是用户只能查看自己的assigned_item分配记录,那规则会更简单,直接筛选userid即可,不需要_exists:
{ "userid": { "_eq": "X-Hasura-User-Id" } }
额外注意事项:
- 确保请求中正确传递了
X-Hasura-User-Id头,并且Hasura的身份验证配置已经启用了这个头的解析。 - 检查
assigned_item表的userid字段类型和X-Hasura-User-Id的类型一致(比如都是字符串或整数),类型不匹配会导致权限验证失败。 - 如果
item表的主键不是id,记得把{{ item.id }}改成对应的字段名,比如{{ item.project_id }}。
内容的提问来源于stack exchange,提问作者meds
相关产品推荐
相关产品推荐

