#amazon-web-services #aws-amplify #aws-appsync #graphql-subscriptions #aws-userpools
Вопрос:
Для справки, у меня есть таблица в Appsync под названием Клиенты, которую я отредактировал в распознавателе, чтобы присоединить группы, частью которых является пользователь, к объекту клиента, который они создают в поле под названием Группы пользователей.
Я пытался написать распознаватель для подключения к подписке OnCreateClient, чтобы, если пользователь не входит в группу пользователей, которая хранится в группах пользователей, они не получали нового клиента при подписке. Я реализовал это в листинге и получении, но до сих пор мне не удавалось работать с шаблонами запросов и ответов в подписке OnCreateClient. Возможно ли такое поведение реализовать таким образом? Я тоже пробовал использовать примеры в реальном времени отсюда: https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html#real-time-data
Я пробовал много разных вещей как в шаблонах сопоставления запросов, так и в шаблонах сопоставления ответов… На данный момент у меня есть это, он даже не позволяет мне подписаться на данный момент, выдавая мне ошибку: «сообщение»: «Сбой подключения: {«ошибки»:[{«Тип ошибки»:»Несанкционированный»,»сообщение»:»Не авторизован для доступа к OnCreateClient по подписке типа»}]}»
Сопоставление запросов:
#set($expressionValues = {})
#foreach($group in $context.identity.claims.get("cognito:groups"))
#set( $expression = "${expression} contains(ownerGroups, :var$foreach.count )" )
#set( $val = {})
#set( $test = $val.put("S", $group))
#set( $values = $expressionValues.put(":var$foreach.count", $val))
#if ( $foreach.hasNext )
#set( $expression = "${expression} OR" )
#end
#end
{
"version" : "2017-02-28",
"operation" : "Scan",
"limit" : 1,
"filter":{
"expression": "$expression",
"expressionValues": $utils.toJson($expressionValues)
}
}
Сопоставление Ответов
#if($ctx.error)
$utils.appendError($ctx.error.message, $ctx.error.message)
#elseif(! ${context.result}) ##checks if there is a result
$utils.unauthorized()
#elseif(${context.identity.claims.get("cognito:groups")} != ${context.arguments.ownerGroups})
$utils.unauthorized()
#else
null
#end