【发布时间】:2021-05-10 11:53:36
【问题描述】:
在我的用例中,一个文档由特定组的多个用户处理。 该文档包含(除了其他条目之外)以下两个相关字段:
-
ownerUID(字符串值 - 代表文档所有者的 UID) -
members(字符串数组 - 表示允许处理此文档的所有成员的 UID)
我想确保(使用安全规则),(除了文档的所有者)没有成员能够从 members 数组中删除另一个成员 - 除了他们自己。
为了评估这一点,我尝试在 Firestore Security Rules 中使用以下函数
function onlyOwnMemberUIDRemovableOrOwner(){
return request.auth.uid == resource.data.ownerUID ||
resource.data.members.toSet().difference(request.resource.data.members.toSet()) == request.auth.uid.toSet();
}
第一条语句非常明显,并且适用于我设置中的其他规则,以允许 owners 无限制地修改文档:
request.auth.uid == resource.data.ownerUID
第二个语句给我带来了问题。这个想法是,通过使用sets 的.difference() 函数来评估members 字段中的缺失值,并将其与仅包含自己的UID 的set 进行比较。只有当缺少的UID 是自己的UID 时,该函数才应该返回true。不幸的是,即使尝试删除自己的UID,该语句仍将返回false。
resource.data.members.toSet().difference(request.resource.data.members.toSet()) == request.auth.uid.toSet()
你能告诉我我在这里做错了什么吗? 您知道解决问题的更好方法吗? 非常感谢您的支持。
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security