如何强制用户仅将文件上传到Firebase中特定文件的某些节点。

时间:2016-06-20 10:24:06

标签: javascript firebase firebase-authentication firebase-security firebase-storage

我尝试使用firebase存储,看着授权用户可以从网络客户端上传文件,我想知道是什么阻止用户通过调整javascript来改变路径。

请考虑以下

我想按如下方式组织用户文件。

root : {
     users :
            uid1 : images {}
                 : audio {}
    -users:
            uid2 : images {}
                 : audio {} 
    -users:
          : uid3 : images {}
                 : audio {} 
     }

然后将图像上传到/ userid / images /

        var storage     = firebase.storage();
        var storageRef  = storage.ref();
        var imagesRef   = storageRef.child(uid_g).child('images').child(path);

问题:

是什么阻止用户将儿童('图片')更改为儿童('音频')

我只是想确保我设置的路径不会在存储时更改。

服务器上的规则我只允许用户读写数据。

// Grants a user access to a node matching their user ID
service firebase.storage {
  match /b/<your-firbase-storage-bucket>/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您可以继续使用安全规则来创建进一步的路径限制:

service firebase.storage {
  match /b/<your-firbase-storage-bucket>/o {
    match /user/{userId} {
      match /images {
        // This will match only /user/{userId}/images
        allow read, write: if imageCondition();
      }
      match /audio {
        // If you don't want the user to change to audio, you can either say if false or just don't include this path
        allow read, write: if audioCondition();
      }
    }
  }
}