Firebase安全规则,仅确保一个“数组删除”,并且仅限于userId

问题描述 投票:1回答:1

我有通知记录,其中有文本和用户列表(最多10个)。

{text: "Beware of the dog", users: [ uid1, uid2, uid3, ... ]}

当用户阅读/确认通知时,我想将他从可以看到通知的用户列表中删除(然后他将不再获得通知)。

为此,当用户按下“隐藏通知按钮”时,他发送更新通知记录的请求:

users: FieldValue.arrayRemove(uid)

我想强制执行用户的安全规则:

  • 不会更改通知记录的其他部分。
  • 在arrayRemove部分发送它的uid,只发送它的uid。

试过

allow update: if 
    request.auth.uid != null 
    && request.auth.uid in resource.data.users 
    && request.resource.size() == 1 
    && request.resource.data.users != null;
  • request.resource.size == 1不起作用。无法弄清楚为什么我的请求中只有一个字段。
  • 我无法确保arrayRemove严格限制在其uid中。

任何提示,帮助,想法都很受欢迎。

google-cloud-firestore firebase-security-rules
1个回答
0
投票

如果没有循环,我认为这是不可能的,这在安全规则中是不存在的。好吧:如果你了解所有用户,你可以枚举所有选项,基本上展开不可能的循环。但即使在安全规则中这是可能的,规则也会非常冗长。

我建议创建一个子集合,其中每个UID都存储在一个单独的文档中。在该子集合中,您可以通过仅允许用户仅删除自己的文档来实现您的要求。

© www.soinside.com 2019 - 2024. All rights reserved.