对单个项目的细粒度访问 - GetItem、DynamoDB Resolver AppSync
Fine Grained Access to a single Item - GetItem, DynamoDB Resolver AppSync
如何在 AppSync 中提供对单个项目的细粒度访问。我有以下用于 GetItem 操作的解析器。
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"identityId": $util.dynamodb.toDynamoDBJson($ctx.args.identityId),
"id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
},
"condition": {
"expression": "attribute_exists(#author) AND #author = :author",
"expressionNames": {
"#identityId": "identityId",
"#id": "id",
"#author": "author"
},
"expressionValues": {
":author" : { "S" : "${ctx.identity.cognitoIdentityId}" }
}
}
}
然而,当我 运行 我得到的查询时:
GraphQL error: Unsupported element '$[condition]'.
没关系,因为根据文档,此操作没有条件键 https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-getitem
我的问题
如果我不能设置条件,我如何 filter/restrict 访问属于特定作者的项目(细粒度访问)?
您可以在响应映射模板中过滤您的结果,如下所示。据我了解,您正在从 cognitoIdentityId 获取作者字段,并且您的项目具有不同的主键,因此您在查询时不能使用作者。
#if($context.result["author"] == $ctx.identity.cognitoIdentityId)
$utils.toJson($context.result);
#else
$utils.unauthorized()
#end
如何在 AppSync 中提供对单个项目的细粒度访问。我有以下用于 GetItem 操作的解析器。
{
"version": "2017-02-28",
"operation": "GetItem",
"key": {
"identityId": $util.dynamodb.toDynamoDBJson($ctx.args.identityId),
"id": $util.dynamodb.toDynamoDBJson($ctx.args.id),
},
"condition": {
"expression": "attribute_exists(#author) AND #author = :author",
"expressionNames": {
"#identityId": "identityId",
"#id": "id",
"#author": "author"
},
"expressionValues": {
":author" : { "S" : "${ctx.identity.cognitoIdentityId}" }
}
}
}
然而,当我 运行 我得到的查询时:
GraphQL error: Unsupported element '$[condition]'.
没关系,因为根据文档,此操作没有条件键 https://docs.aws.amazon.com/appsync/latest/devguide/resolver-mapping-template-reference-dynamodb.html#aws-appsync-resolver-mapping-template-reference-dynamodb-getitem
我的问题 如果我不能设置条件,我如何 filter/restrict 访问属于特定作者的项目(细粒度访问)?
您可以在响应映射模板中过滤您的结果,如下所示。据我了解,您正在从 cognitoIdentityId 获取作者字段,并且您的项目具有不同的主键,因此您在查询时不能使用作者。
#if($context.result["author"] == $ctx.identity.cognitoIdentityId)
$utils.toJson($context.result);
#else
$utils.unauthorized()
#end