此方案的Firestore安全规则

问题描述 投票:1回答:1

我是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; 
            }

        }

    }

  }

}

我的问题是我的规则是否安全?这似乎过于简单化,我不确定是否足以满足我的情况。

提前感谢!

google-cloud-firestore firebase-security-rules
1个回答
1
投票

您的规则对我来说很好。

但是我不建议您这样做,我强烈建议您使用Firestore local rules emulator并针对您的规则编写一些测试,以验证是否允许或拒绝非常具体的查询(您定义的查询)。无论出于何种原因,每次都要更改规则时,都要针对您的规则运行这些测试,因此您有信心规则仍将按预期运行。与您每次想知道一组规则是否能满足您的期望时相比,我保证此过程将产生比发布到Stack Overflow更好,更快的结果。 :-)

© www.soinside.com 2019 - 2024. All rights reserved.