Firestore安全规则不应允许删除,但允许

时间:2020-04-01 03:43:35

标签: firebase google-cloud-firestore firebase-security

Firebase安全规则似乎无效。

我希望禁止删除其他人的对象。 我配置了删除规则:

if resource == null || request.auth.uid == resource.data.owner

我进行了测试,如果用户尝试删除其他对象,该请求将验证请求是否失败。但是,请求成功。

这些是我所有的安全规则:

service cloud.firestore {
  match /databases/{database}/documents {
    match /{collection}/{document} {
      allow create: 
        if request.auth.uid == request.resource.data.owner

        && (collection != "Person" 
            || request.resource.data.owner == request.resource.data.id)
      allow update: 
        if request.auth.uid == resource.data.owner
        && request.auth.uid == request.resource.data.owner

        && (collection != "Person" 
            || request.resource.data.owner == request.resource.data.id)
      allow get, delete: 
        if resource == null
        || request.auth.uid == resource.data.owner
      allow list:
        if collection == "XfCard"
    }
  }
}

可能缺少什么?

2 个答案:

答案 0 :(得分:0)

resource.data.owner不仅仅是一个变量,您可以用来与另一个变量进行比较。考虑到这一点,通常需要将其设置为特定路径,而不仅仅是执行直接的常规比较。

从社区here的另一个问题中可以看出,通常有必要将所有者与文档所有者的路径进行比较,大致类似以下代码:

if resource.data.owner == /databases/$(database)/documents/users/$(uid_owner)

通过这种方式,您应该能够使用它并确认所有者(相对于文档)的身份。

除了查看上面的社区帖子并尝试使用上面的代码(未经测试)进行尝试,但我认为这是一个不错的起点-,我建议您看看在官方文档下面,您可以找到有关组查询安全规则的更多信息。

让我知道信息是否对您有帮助!

答案 1 :(得分:0)

调试之后,我发现请求成功,但是未删除该对象。 我的HTTP请求只是不返回错误消息。