根据我对文档的了解,不,您不能针对地图中的特定键。因此,要么将它们拆分为自己的“字段”,要么允许用户修改整个地图。
值得注意的是,在 DynamoDB 行话中,Tables 是 Items 的集合。项目是属性的集合。因此,将属性命名为“属性”可能会导致混淆。
Anywho... 我会推荐一个类似于以下的模型,其中特性 ;) 是单独的项目属性:
UserID [string]
Name [string]
Height [string]
Weight [Float]
Race [String]
(我在猜测用户的特征)
这是一项政策,允许他们仅更新身高和体重,并且仅根据用户 ID 更新他们自己的记录。当然,在这方面的“用户”需要以某种方式成为federated。出于我们的目的,我假设您可能会使用Web Identity Federation。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowAccessToOnlyItemsMatchingUserID",
"Effect": "Allow",
"Action": [
"dynamodb:GetItem",
"dynamodb:BatchGetItem",
"dynamodb:Query",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem",
"dynamodb:BatchWriteItem"
],
"Resource": [
"arn:aws:dynamodb:us-west-2:123456789012:table/Users"
],
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": [
"${www.amazon.com:user_id}"
],
"dynamodb:Attributes": [
"UserID",
"Height",
"Weight",
...
<list other allowed to edit attributes here>
]
},
"StringEqualsIfExists": {
"dynamodb:Select": "SPECIFIC_ATTRIBUTES"
}
}
}
]
}
是的,${www.amazon.com:user_id} 中的 user_id 是正确的。它是替换变量
的一部分
From the documentation:
- dynamodb:LeadingKeys – 此条件键允许用户仅访问分区键值与其用户 ID 匹配的项目。此 ID ${www.amazon.com:user_id} 是一个替换变量。有关替换变量的更多信息,请参阅使用 Web 身份联合。
- dynamodb:Attributes – 此条件键限制对指定属性的访问,因此只有权限策略中列出的操作才能返回这些属性的值。此外,StringEqualsIfExists 子句确保应用程序必须始终提供要执行的特定属性列表,并且应用程序不能请求所有属性。