配置行级安全策略后IHP DataSync无返回结果,相关报错如何解决?
问题原因
这个报错和你配置的行级安全策略无关,是IHP 0.16版本DataSync功能的SQL参数拼接逻辑异常导致的:
报错日志中的FormatError显示生成的SQL模板SELECT ? FROM ??只有1个普通参数占位符(双问号??属于标识符占位符,不算普通参数位),但实际传入了3个参数["*","characters",""],参数数量不匹配触发了错误。
常见触发场景有两个:
- 你没有在
FrontController的DataSync配置中显式注册characters表的访问规则,框架处理未授权表请求时错误生成了多余的空参数 - 你给
characters表配置的允许访问字段列表为空,导致SQL生成逻辑额外拼接了空参数
解决方法
检查并修改FrontController.hs中的DataSync配置,确保显式注册characters表并正确配置允许字段:
instance DataSyncController Web where dataSyncTables = [ table @"characters" { allowedFields = allColumns -- 允许访问所有字段,禁止写空列表[] , allowedQueries = allQueries -- 按需调整读权限 , allowedWrites = allWrites -- 按需调整写权限 } ]
如果需要限制可访问的字段,就显式列出字段列表,不要留空:
allowedFields = [field @"id", field @"name", field @"user_id"]
修改完成后重启IHP服务,再执行await query("characters").fetch()即可正常返回数据。
内容的提问来源于stack exchange,提问作者Lars Lillo Ulvestad
相关产品推荐
相关产品推荐

