Мелкозернистый доступ к одному элементу - GetItem, DynamoDB Resolver AppSync - PullRequest
0 голосов
/ 17 мая 2019

Как предоставить детальный доступ к одному элементу в 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

Мой вопрос Как я могу отфильтровать / ограничить доступ к элементам, принадлежащим конкретному автору (Детальный доступ), если я не могу поставить условия?

1 Ответ

2 голосов
/ 21 мая 2019

Вы можете отфильтровать свой результат в шаблоне отображения ответов, например ниже. Насколько я понимаю, вы получаете поле автора из cognitoIdentityId, а ваш элемент имеет другой первичный ключ, поэтому вы не можете использовать автора при запросе.

#if($context.result["author"] == $ctx.identity.cognitoIdentityId)
    $utils.toJson($context.result);
#else
    $utils.unauthorized()
#end
...