Firebase存储通配符规则

时间:2018-02-23 19:22:00

标签: firebase firebase-storage firebase-security

我目前正在使用NodeJS,HTML和Firebase编写一个网站,用于数据库服务,身份验证和存储。我目前遇到的问题是Firebase存储规则根据我对文档的解释不起作用。

我的Firebase存储实例的目录结构如下(显然是假的uid):

/
└─ users/
   ├─ a67dhfa7dhf96/
   │   ├─ picture.jpg
   │   └─ private/
   │       └─ privateDetails.txt
   └─ h9dh91hf7edgn/
       ├─ picture.jpg
       └─ private/
           └─ privateDetails.txt

我想这样做,以便存储在不同用户文件中的文件可由任何用户读取,无论他们是否经过身份验证,然后使私有文件夹中的文件仅供登录用户使用。我当前的Firebase存储规则如下所示:

service firebase.storage {
    match /b/{bucket}/o {
        match /users/{userId} {
            match /* {
                allow read;
            }
            match /private {
                allow read, write: if request.auth != null;
            }
        }
    }
}

根据这些规则,我总是在任何文件上获得403:“权限被拒绝。无法执行此操作”,而不使用Firebase存储提供的自定义下载令牌,无论文件是否在私人目录中。我也尝试了以下规则,每个文件也产生403.

service firebase.storage {
    match /b/{bucket}/o {
        match /users/{userId}/* {
            allow read;
        }
        match /users/{userId}/private {
            allow read, write: if request.auth != null;
        }
    }
}

为什么这些规则不能像他们那样工作?

1 个答案:

答案 0 :(得分:0)

您应该使用wildcards来匹配/users/{userId}/*

service firebase.storage {
    match /b/{bucket}/o {
        match /users/{userId} {
            match /{imageId}{
              allow read;
            }
            match /private/{imageId}{
              allow read, write: if request.auth != null;
            }
        }
    }
}