限制用户在Fauna DB中只能读取自己的数据



我们使用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

最新更新