我们使用FaunaDB来存储用户和用户的电影收藏。为了访问动物群函数中的数据,我们使用绑定到角色的密钥。用户文档看起来像这样:
{
username:"John Doe",
email: "john@doe.com",
userID: "124"
}
Movie Collection文档看起来像这样:
{
userID: "124",
movies:['Titanic','Forrest Gump']
}
要查询用户的电影集合,我们调用动物群函数,其中包含角色user和为该角色生成的特定密钥
Call(Function("Get_users_moive"), '124')
我想知道是否可以限制用户,只查询自己的数据?在上面的函数中,如果我给出另一个userID,它将返回另一个用户集合。
感谢你当然可以在Fauna中做到这一点。你可以创建"身份"并为这些文档提供可用于对用户进行身份验证的凭据。一旦用户通过身份验证,就会创建令牌的秘密。从那时起,用户可以使用该秘密直接查询动物群,如果您选择允许他们这样做的话。
此外,Fauna具有基于属性的访问控制(ABAC)。您定义了一个角色,它有两个主要特性:一个特权定义,它允许您控制具有该角色的用户拥有哪些集合、索引、文档等;一个成员定义,它允许您指定哪些身份属于该角色。
角色的权限和成员资格定义可以使用谓词:谓词可以动态地确定权限或成员资格是否应该应用于当前查询。
您可以在文档中找到更多信息:
- 标记
- ABAC
为了确保用户只能访问他们创建的电影记录,您需要在每个电影文档中存储对身份文档的引用。
当用户使用他们通过Login
函数获得的令牌的secret时,角色谓词可以使用CurrentIdentity
函数检索到对相关身份文档的引用,然后将其与存储在电影文档中的引用进行比较。如果匹配,则授予读访问权限,否则不授予。
详情请参见:
- 登录
- CurrentIdentity