google-cloud-firestore - 此方案的 Firestore 安全规则
问题描述
我是 Firestore 安全规则的新手,我想确保我编写的规则对我的案例是安全的。
我的数据库结构如下:
用户/userId/员工/employeeId/文件/fileId
我不对其进行非规范化并为用户、员工和文件创建单独集合的原因是因为此应用程序不需要任何类型的交叉集合查询,应用程序中没有需要列出所有员工或其文件的地方. 这让我想到了规则。
只有员工或文件集合的所有者才能访问它。员工或文件中的所有内容都可以更改。对于 users 集合,应该只允许创建,因为在登录时应该能够创建新用户,但任何用户都不能编辑或删除任何其他现有用户。除了以上所有内容之外,没有其他任何内容,此应用程序没有角色。
我的规则如下:
service cloud.firestore {
match /databases/{database}/documents {
//can read and create if matching userId
//CREATE: NO USER CAN DELETE ACCOUNTS
match /users/{userId} {
allow read, create: if request.auth.uid == userId;
//can read and write if matching userId
match /employees/{employeeId} {
allow read, write, update: if request.auth.uid == userId;
//can read and write if matching userId
match /files/{fileId} {
allow read, write: if request.auth.uid == userId;
}
}
}
}
}
我的问题是我的规则是否安全?这看起来非常简单,我只是不确定这是否足以满足我的情况。
提前致谢!
解决方案
你的规则在我看来很好。
但与其相信我的话,我强烈建议您使用Firestore 本地规则模拟器并针对您的规则编写一些测试,以验证是否允许或拒绝非常具体的查询(您定义的)。无论出于何种原因,每当您的规则必须更改时,针对您的规则运行这些测试,这样您就可以确信这些规则仍将按预期工作。我向您保证,每次您想知道一组规则是否能达到您的预期时,此过程将产生比发布到 Stack Overflow 更好、更快的结果。:-)
推荐阅读
- python - 如何更新while循环内的变量并查看结果?
- django - 静态文件不适用于 Django、Heroku 和 Django Sass 处理器
- php - Laravel 5.7 升级后使用 configureMonologUsing - 主管日志记录权限
- html - Navbar Burger (Dropdown) 将内容下推?
- ionic-framework - 如何在启动画面之前删除灰屏 - Ionic 4
- javascript - 在 Javascript 中创建一个二维数组,其值作为索引的乘积
- c# - Microsoft 信息保护 SDK:使用用户名/密码登录
- python - 需要从在检查模式下执行的 ansible playbook 输出生成 CSV 文件报告(空运行)
- flutter - How to add linear gradient to LinearProgressIndicator?
- json - 如何让 golang 打印 JSON 中的所有字段?