gpt4 book ai didi

google-cloud-firestore - 用 Firestore 安全规则(多对多安全规则)比较两张 map ?

转载 作者:行者123 更新时间:2023-12-03 21:09:54 25 4
gpt4 key购买 nike

管理员可以管理多个论坛,用户可以是多个论坛的成员。如果发现管理员是该用户所属论坛的管理员,则该管理员应有权访问 read该用户的个人资料数据。安全规则必须能够比较两个 map 以查看它们是否具有共同的 forumID,如下所示:

// WARNING: INVALID CODE

"accounts": {
".read": "auth.token.permissions.fundIDsAdminMap.doAnyKeysMatch(resource.data.fundIDsMemberMap) === true"
}

不幸的是,比较两张 map 需要特殊的内置函数(如上例所示)、循环或递归,我认为目前在 firebase 规则中不存在这些。

对此建模的最佳方法是什么?

一种解决方案是放弃诸如“fundAdmin”之类的角色,而是直接记录 accountIDs可以在对象本身上管理特定对象。这样可以针对登录用户的 uid 执行安全性:
resource.data.administeredBy[request.auth.uid] == true

// doc would have administeredBy property
account.administeredBy= {
accountID1: true,
accountID5: true
};

这样做的问题在于它插入并增加了 write 的大量复杂性。等式的一边。每次管理员更改时,必须编写许多分散在各处的单个文档以反射(reflect)更改。此外,大量冗余数据必须存储在更多不同的对象中。此外,数据库将必须在权限管理中发挥更大的作用(因为必须存储所有这些帐户 ID),而不是将其与安全规则隔离开来。最后,不能使用“角色”范式来组织权限,这很奇怪。任何没有那么多缺点的聪明解决方案?

最佳答案

看起来 map 可以在firestore规则中有所不同:https://firebase.google.com/docs/reference/rules/rules.MapDiff
但是,尽管您的帖子标题是 Firestore,但您提供的示例规则看起来像 RTDB 规则,因此请说明您要询问的是哪些规则。

关于google-cloud-firestore - 用 Firestore 安全规则(多对多安全规则)比较两张 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54641495/

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