我们有一个基本的云存储应用程序,现在支持共享文件。但是,在编写规则时,我遇到了一个问题:
使用通配符$ file,可以使用JS控制台将一个可以访问的文件夹加载到一个节点(节点)中,但是当尝试访问根文件目录时,它不会加载任何文件,而不是加载节点一个可以访问。问题在于,根目录上没有读写规则,而呈现功能需要获取该目录的值,然后将文件加载到目录中。
我想知道是否有一种方法可以获取目录的值,以返回仅包含一个人可以访问的文件的值?
我的意思是:
firebase.database().ref('/shared-files/shared/files/').on('value', (snapshot) => {
alert(snapshot.val())
})
会向json警告您有权访问的文件,但不包括那些您没有权限的文件。 共享文件的当前规则如下,共享文件的根目录位于/ shared-files / shared / files /
"shared-files": {
"shared": {
"files": {
"$file": {
".read":"root.child('shared-files').child('shared').child('files').child($file).child('users').hasChild(auth.token.email.replace('@forcloud.app',''))",
".write":"(root.child('shared-files').child('shared').child('files').child($file).child('users').hasChild(auth.token.email.replace('@forcloud.app',''))) || newData.exists()"
}
}
}
}
答案 0 :(得分:0)
似乎您希望将/ shared-files / shared / files下的子级过滤为仅用户有权访问的特定子级。您现在做的方式是不可能的。 Security rules are not filters。如果将拒绝任何子级访问,则整个读取将失败。
您要做的是组织数据,以使客户端可以根据规则中的逻辑仅查询他们知道应该访问的项目。客户端过滤器必须匹配安全规则应用的限制。