限制对Firebase Firestore和存储的访问

时间:2018-07-24 12:14:35

标签: firebase google-cloud-firestore firebase-security-rules

我仅在我的应用程序中使用Firebase-身份验证,Firestore,功能和存储。

在Firestore中,我的数据结构如下:

/users/<user_id>/<user_data>
/listings/<listing_id>/<listing_data>

<listing_data>包含一个user_id字段。

在存储中,我的数据结构如下:

/images/<user_id>/<image_id>/<images>

我有以下情况:

  • 用户只能访问其列表
  • 用户只能下载他们的文件
  • 用户可以与选定的用户共享其<user_data>中的名字
  • 用户可以与选定的用户共享选定的图像

我不知道该如何处理。目前,任何人都可以通过身份验证访问任何内容,因此我想第一步是将其锁定,然后再分配权限?

我曾考虑过要添加一个访问列表对象,然后编写中间件来检查它,但是感觉不正确

1 个答案:

答案 0 :(得分:1)

您必须将firestore的规则修改为:

service cloud.firestore {
  match /databases/{database}/documents {
        // Restaurants:
        //   - Authenticated user can read
        //   - Authenticated user can create/update (for demo)
        //   - Validate updates
        //   - Deletes are not allowed
    match /restaurants/{restaurantId} {
      allow read, create: if request.auth.uid != null;
      allow update: if request.auth.uid != null
                    && request.resource.data.name == resource.data.name
      allow delete: if false;

      // Ratings:
      //   - Authenticated user can read
      //   - Authenticated user can create if userId matches
      //   - Deletes and updates are not allowed
      match /ratings/{ratingId} {
        allow read: if request.auth.uid != null;
        allow create: if request.auth.uid != null
                      && request.resource.data.userId == request.auth.uid;
        allow update, delete: if false;

        }
    }
  }
}

我数据库的根是餐厅。您必须将这些参数替换为您的参数。