快速验证 Firebase 安全规则

要在 Firebase 控制台中快速测试更新后的 Firebase 安全规则,请使用 Firebase 规则模拟器。

Firebase 规则模拟器是一种方便的工具,可用于探索新的行为或者在您创建规则时快速验证这些规则。它会显示一条消息,根据您为模拟设置的参数确认允许还是拒绝访问。

使用 Firebase 规则模拟器

  1. 打开 Firebase 控制台,然后选择您的项目。
  2. 接着,从产品导航中选择数据库Storage
    • 数据库:选择一个数据库,然后点击规则以导航到规则编辑器。
    • Storage:点击规则以导航到规则编辑器。
  3. 完成修改后,点击编辑器中的模拟器
  4. 在“模拟器”设置中,选择用于测试的选项,包括:
    • 测试读取或写入
    • 数据库中的特定位置(以路径表示)
    • 身份验证类型 - 未经身份验证、经过身份验证的匿名用户或特定用户 ID
    • 您的规则特别引用的文档专属数据(例如,如果您的规则要求必须存在特定字段才允许执行写入操作)
  5. 点击运行,然后在编辑器上方的横幅中查看结果。

示例模拟器场景

使用以下示例场景和基本规则测试模拟器行为。

  1. 在规则编辑器中,添加以下基本规则:

    Cloud Firestore

    service cloud.firestore {
     match /databases/{database}/documents {
       // Allow only authenticated content owners access
       match /some_collection/{document} {
         allow read, write: if request.auth.uid == request.resource.data.author_uid
       }
     }
    }
    

    实时数据库

    // These rules grant access to a node matching the authenticated
    // user's ID from the Firebase auth token
    {
    "rules": {
     "users": {
       "$uid": {
         ".read": "$uid === auth.uid",
         ".write": "$uid === auth.uid"
       }
     }
    }
    }
    

    Storage

    // Grants a user access to a node matching their user ID
    service firebase.storage {
    match /b/{bucket}/o {
     // Files look like: "user/<UID>/path/to/file.txt"
     match /user/{userId}/{allPaths=**} {
       allow read, write: if request.auth.uid == userId;
     }
    }
    }
    
  2. 模拟类型下拉菜单中选择获取,然后在位置字段中输入一个有效的路径。

  3. 启用身份验证,并从提供方下拉菜单中选择一个身份验证类型。

  4. 输入用户 ID 详细信息,并点击运行

模拟结果显示在编辑器的顶部。根据您输入的用户 ID 详细信息,您应该看到一个横幅,确认已成功允许或拒绝读取操作。