首页 > 解决方案 > 此方案的 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; 
            }

        }

    }

  }

}

我的问题是我的规则是否安全?这看起来非常简单,我只是不确定这是否足以满足我的情况。

提前致谢!

标签: google-cloud-firestorefirebase-security

解决方案


你的规则在我看来很好。

但与其相信我的话,我强烈建议您使用Firestore 本地规则模拟器并针对您的规则编写一些测试,以验证是否允许或拒绝非常具体的查询(您定义的)。无论出于何种原因,每当您的规则必须更改时,针对您的规则运行这些测试,这样您就可以确信这些规则仍将按预期工作。我向您保证,每次您想知道一组规则是否能达到您的预期时,此过程将产生比发布到 Stack Overflow 更好、更快的结果。:-)


推荐阅读