Hasura用户级仅设插入权限,插入突变提示mutation_root无对应字段求助
解决Hasura突变
insert_appraise_request_v2_one找不到字段的问题 问题场景
新增表appraise_request_v2并配置用户级插入权限后,客户端调用自动生成的insert_appraise_request_v2_one突变时报错:
"field 'insert_appraise_request_v2_one' not found in type: 'mutation_root'"
但在Hasura管理控制台执行该突变完全正常,客户端代码如下:
export const INSERT_APPRAISE_REQUEST_V2 = gql` mutation InsertAppraiseRequestV2($object: appraise_request_v2_insert_input!) { insert_appraise_request_v2_one(object: $object) { id } } `
排查与解决方法
检查角色权限配置
管理控制台用的是管理员权限,能看到所有突变,但客户端用的是普通用户角色,需确认该角色的插入权限是否正确配置:- 进入Hasura控制台
Data -> appraise_request_v2 -> Permissions - 找到对应用户角色的Insert权限,确认权限状态为
Enabled - 确保权限规则(比如行级权限)没有限制到导致突变无法生成的程度,同时
Return columns里勾选了id字段(因为你的突变需要返回该字段)
- 进入Hasura控制台
刷新客户端GraphQL Schema
客户端可能缓存了旧的Schema,导致新表的突变字段未被加载:- 若使用Apollo Client,调用
client.resetStore()清除缓存,或重新生成Schema文件 - 手动触发客户端重新拉取Hasura的最新Schema,确保请求的端点是正确的Hasura实例
- 若使用Apollo Client,调用
重新加载Hasura Metadata
新增表和权限后,Hasura的Metadata可能未完全同步:- 进入Hasura控制台
Settings -> Metadata - 点击
Reload Metadata,等待操作完成后再测试客户端请求
- 进入Hasura控制台
验证客户端可用突变字段
可以通过Introspection查询查看当前客户端能访问的突变字段,确认insert_appraise_request_v2_one是否存在:query IntrospectMutations { __type(name: "mutation_root") { fields { name } } }
内容的提问来源于stack exchange,提问作者Amir
相关产品推荐
相关产品推荐

