[英]AWS Appsync GraphQL OnCreate Subscription Resolver for multitenancy
作为参考,我在 Appsync 中有一个名为 Clients 的表,我编辑了解析器以将用户所属的组附加到他们在名为 userGroups 的字段中创建的客户端 object。
我一直在尝试编写一个解析器以附加到 onCreateClient 订阅,这样如果用户不是存储在 userGroups 中的用户池组的一部分 - 他们在订阅时将不会收到新客户端。 我已经在列出和获取时实现了这一点,但到目前为止在 onCreateClient 订阅上使用请求和响应模板时运气不佳。 这种行为可以以这种方式实现吗? 我也尝试过使用此处的实时示例: https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html#real-time-data
我在请求和响应映射模板中尝试了许多不同的东西......现在我已经有了这个,它甚至不让我订阅,给我一个错误:“消息”:“连接失败:{ "errors":[{"errorType":"Unauthorized","message":"无权访问 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.