swift - Firestore 安全规则违反更新规则
问题描述
我昨天发布了一个关于这个的问题,但我正在创建一个包含更多细节的新问题。 Firestore .setData 被未创建的更新规则阻止
我已经运行了模拟器并且规则在那里工作。此外,当我创建文档并将setData
swift 代码更改update
为代码有效时。它似乎只在创建文档时失败。但问题是,当我删除update
规则或只是将其更改为allow update: if false;
setData(或视为由规则创建)时,会正确执行。我不知道发生了什么,也不知道有什么工具可以更好地了解情况。
match /users_real/{userID} {
allow create: if true;
allow read: if isOwner(userID);
allow update: if (request.writeFields.size() == 1);
}
设置数据:
self.docRef.collection("users_real").document("adfadsf").setData(post) { (error) in
if let error = error {
print("He dead!: \(error.localizedDescription)")
}
else {
print("it worked, for now")
}
}
解决方案
Firebase 支持确认存在与request.writeFields.size()
. 没有估计何时修复。
可以通过以下规则证明 bug 的存在:
service cloud.firestore {
match /databases/{database}/documents {
match /cities/{city} {
// This should always evaluate to true, but does not.
allow create: if (request.writeFields.size() == 1) || (request.writeFields.size() != 1);
allow update: if true;
}
}
}
尽管该create
规则应始终评估为 true,但创建城市的尝试失败并显示 Permission Denied。似乎问题request.writeFields
不仅影响它出现的规则,还影响路径的其他规则。对于上面显示的规则,更新现有城市的尝试也会因 Permission Denied 而失败。
推荐阅读
- javascript - 需要在 javascript 中显示来自 db 的数据
- c++ - 从 QFileSystemModel 中的文件路径和文件名获取 QModelIndex
- c++ - 将类的特定实例中的函数分配给变量以保持状态
- batch-file - 使用批处理文件打开单独文件夹中的每个文件
- json - React JS为什么页面无法将用户路由到登录页面
- hadoop - 无法使用 Hadoop 命令创建目录?
- xamarin.forms - 应用程序在 iOS 中为 Xamarin.Forms 运行时未收到推送通知
- c# - TimeZoneInfo DST 与 Windows 设置
- python - 使用 Heroku/Postgresql 部署的 Django 应用程序 - 一些 Python/JS 公式仅在生产环境中不起作用,值会跳回以前的值
- xamarin - 用于按钮背景颜色转换的 CustomRenderer