此问题是由于 Amplify GraphQL DataStore 不支持在 auth rules 中使用 groupsField 条件导致的。
解决方法是使用自定义 resolver 实现验证和限制访问,以下是一个示例:
首先,在 schema.graphql 文件中定义一个自定义 resolver,并指定它的请求和响应类型。这里我们定义了一个查询类型的 resolver:
type Query { getProtectedData: String @auth(rules: [{ allow: groups, groups: ["admin"] }]) }
接下来,在 AppSync 控制台中添加一个 resolver,并将它与刚刚添加的自定义 resolver 绑定。在设置中,选择 Lambda,使用 Node.js 作为运行环境,并将以下代码粘贴到 Lambda Function 代码段:
exports.handler = function(event, context) { const userGroups = event.identity.groups; if(!userGroups.includes("admin")) { const error = new Error("You are not authorized to access this resource."); context.fail(error); } context.done(null, 'Authorized'); };
最后,更新 Amplify 配置文件以使用我们创建的自定义 resolver:
amplify update api
选择 GraphQL,然后将 getProtectedData 查询与刚刚创建的自定义 resolver 绑定。
完成以上步骤后,应该可以使用自定义 resolver 来验证和限制访问了。