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"
}
}
}
可能缺少什么?
答案 0 :(得分:0)
resource.data.owner
不仅仅是一个变量,您可以用来与另一个变量进行比较。考虑到这一点,通常需要将其设置为特定路径,而不仅仅是执行直接的常规比较。
从社区here的另一个问题中可以看出,通常有必要将所有者与文档所有者的路径进行比较,大致类似以下代码:
if resource.data.owner == /databases/$(database)/documents/users/$(uid_owner)
通过这种方式,您应该能够使用它并确认所有者(相对于文档)的身份。
除了查看上面的社区帖子并尝试使用上面的代码(未经测试)进行尝试,但我认为这是一个不错的起点-,我建议您看看在官方文档下面,您可以找到有关组查询安全规则的更多信息。
让我知道信息是否对您有帮助!
答案 1 :(得分:0)
调试之后,我发现请求成功,但是未删除该对象。 我的HTTP请求只是不返回错误消息。