对单个项目的细粒度访问 - 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