Hasura v2.20.0对接SQL Server时自定义权限无_in运算符的疑问
问题解答
核心原因
SQL Server确实不支持Hasura中Postgres专属的_in运算符——这是Hasura针对不同数据库语法适配的差异导致的:Postgres原生支持数组类型的直接匹配,_in是Hasura封装的对应语法;但SQL Server的语法体系里没有类似的数组运算符,需要用原生SQL的方式处理数组匹配。
解决方案
要实现你需要的权限逻辑(用户只能访问DepartmentID匹配会话变量x-hasura-department-ids数组中任意值的行),可以在Hasura的行级权限自定义检查中使用sql()函数编写SQL Server原生语句,利用OPENJSON解析JSON格式的会话变量数组:
sql($$DepartmentID IN (SELECT value FROM OPENJSON({{x-hasura-department-ids}}))$$)
注意事项
- 确保会话变量
x-hasura-department-ids的格式是JSON数组,比如请求头中传入的值为:["1", "2", "3"] - 如果你的DepartmentID是数值类型,
OPENJSON会自动转换类型匹配,无需额外处理
内容的提问来源于stack exchange,提问作者Syed Waqas
相关产品推荐
相关产品推荐

