gpt4 book ai didi

graphql - 如何使用 Appsync 在 Cognito 中授予对某些用户组的访问权限

转载 作者:行者123 更新时间:2023-12-05 05:11:56 26 4
gpt4 key购买 nike

我最近进入了 AWS,我将 appsync 与带有用户 ID 索引(来自认知池)的 dynamo 表一起使用,以仅授予特定用户对特定数据的访问权限。现在我想进一步扩展这一点,并允许访问某些认知组。这是我的代码:

第一。我的突变

    ## [Start] Prepare DynamoDB PutItem Request. **
$util.qr($context.args.input.put("createdAt", $util.time.nowISO8601()))
$util.qr($context.args.input.put("updatedAt", $util.time.nowISO8601()))
$util.qr($context.args.input.put("__typename", "Patient"))

## This line adds the userId, accessed from the $ctx.identity variable
$util.qr($context.args.input.put("userId", $ctx.identity.sub))
$util.qr($context.args.input.put("Groupi", $ctx.identity.claims.get("cognito:groups")))



{
"version": "2017-02-28",
"operation": "PutItem",
"key": {
"id": $util.dynamodb.toDynamoDBJson($util.defaultIfNullOrBlank($ctx.args.input.id, $util.autoId()))
},
"attributeValues": $util.dynamodb.toMapValuesJson($context.args.input),
"condition": {
"expression": "attribute_not_exists(#id)",
"expressionNames": {
"#id": "id"
}
}
}

和查询

#set( $limit = $util.defaultIfNull($context.args.limit, 10) )

{
"version" : "2017-02-28",
"operation" : "Query",
"limit": $limit,
"index": "userId-index",
"query" : {
"expression": "userId = :userId",
"expressionValues" : {
":userId" : $util.dynamodb.toDynamoDBJson($ctx.identity.sub)
}
},
"nextToken": #if( $context.args.nextToken )
"$context.args.nextToken"

#else
null
#end
}

我想扩展查询以支持 t6he 组。帮助将不胜感激。谢谢!

最佳答案

授权文档有很多您可能会觉得有用的示例:https://docs.aws.amazon.com/appsync/latest/devguide/security-authorization-use-cases.html

具体来说,这个:

#set($expression = "")
#set($expressionValues = {})
#foreach($group in $context.identity.claims.get("cognito:groups"))
#set( $expression = "${expression} contains(groupsCanAccess, :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": #if(${context.arguments.count}) "${context.arguments.count}" #else 20 #end,
"nextToken": #if(${context.arguments.nextToken}) "${context.arguments.nextToken}" #else null #end,
"filter":{
"expression": "$expression",
"expressionValues": $utils.toJson($expressionValues)
}
}

该示例有一些额外的信息,因为它是关于列表调用而不是简单的获取,但是您可以看到它是在表达式/表达式值中设置的。此实现看起来与您所拥有的略有不同,因为它允许用户在多个组中,其中任何一个都可以工作。

这有意义吗?

关于graphql - 如何使用 Appsync 在 Cognito 中授予对某些用户组的访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54946757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com