Распознаватель подписки AWS Appsync GraphQL onCreate для многопользовательской работы

#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