我是Firestore安全规则的新手,我想确保编写的规则对我的情况是安全的。
我的数据库结构如下:
用户/用户ID /员工/雇员ID /文件/文件ID
之所以我不对它进行规范化,而是为用户,员工和文件创建一个单独的集合,是因为此应用程序不需要任何类型的交叉集合查询,因此应用程序中没有地方需要所有员工或其文件被列出。这使我遵守了规则。
只有雇员或文件集合的所有者才可以访问它。员工或文件中的所有内容都可以更改。对于用户集合,应仅允许创建,因为登录时应该可以创建新用户,但是任何用户都不能编辑或删除任何其他现有用户。除了上述所有内容外,没有任何其他内容,此应用没有任何角色。
我的规则如下:
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 local rules emulator并针对您的规则编写一些测试,以验证是否允许或拒绝非常具体的查询(您定义的查询)。无论出于何种原因,每次都要更改规则时,都要针对您的规则运行这些测试,因此您有信心规则仍将按预期运行。与您每次想知道一组规则是否能满足您的期望时相比,我保证此过程将产生比发布到Stack Overflow更好,更快的结果。 :-)