Rest 使用DynamoDB对具有身份验证的分层数据建模
我正在寻找一些最佳实践,在一般情况下,尤其是在使用DynamoDB建模机密层次数据时 最好用一个示例来解释该场景: 假设我们有许多Rest 使用DynamoDB对具有身份验证的分层数据建模,rest,authentication,database-design,amazon-dynamodb,data-modeling,Rest,Authentication,Database Design,Amazon Dynamodb,Data Modeling,我正在寻找一些最佳实践,在一般情况下,尤其是在使用DynamoDB建模机密层次数据时 最好用一个示例来解释该场景: 假设我们有许多用户。每个用户都有许多产品。每个产品由许多部分组成 典型用例: 列出给定用户的所有产品 列出给定产品的所有零件 到目前为止,我在DynamoDB中对此进行了如下建模: Users ---------------- HashKey: UserId Products ------------------- HashKey: UserId RangeKey: P
用户
。每个用户
都有许多产品
。每个产品
由许多部分组成
典型用例:
- 列出给定
用户的所有
产品
- 列出给定
产品的所有
零件
Users
----------------
HashKey: UserId
Products
-------------------
HashKey: UserId
RangeKey: ProductId
Parts
-------------------
HashKey: ProductId
RangeKey: PartId
数据是保密的,通过经过身份验证的REST端点访问,其中身份验证令牌可以映射到用户ID
。允许每个用户通过某些组概念查看其他用户的数据
列出给定用户的所有产品很简单,因为UserId
是products表中的一个键:
GET/users/111/products
成为一个简单的查询(Table=products,UserId=111)
但是考虑一个给定产品的所有零件的列表的情况:
GET/users/111/products/222/parts
如果我只是做一个查询(Table=Parts,ProductId=222)
,那么我将快速获得所需的数据,但我不会阻止其他用户查询属于用户111的数据,前提是他们不知何故知道ProductId
222(实际上,ID:s当然是UUID:s或类似的,因此不容易猜测):
GET/users/119/products/222/parts
。。。将导致恶意用户119检索不属于他的数据,前提是不采取任何措施来解决此问题。
所以在这里我想我需要做一些像这样的事情:
UserId
,并将其包含在查询条件中(这基本上意味着在扫描由ProductId
标识的集合时,它将匹配所有行或无行):query(table=Parts,ProductId=222,UserId=111)
零件
表上使用复合哈希键,如用户ID\u产品ID
(“111\u 222”)