Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实时数据库安全规则无法访问根目录_Javascript_Firebase_Firebase Realtime Database_Firebase Security - Fatal编程技术网

Javascript 实时数据库安全规则无法访问根目录

Javascript 实时数据库安全规则无法访问根目录,javascript,firebase,firebase-realtime-database,firebase-security,Javascript,Firebase,Firebase Realtime Database,Firebase Security,我们有一个基本的云存储应用程序,现在支持共享文件。然而,在编写规则时,我遇到了一个问题: 使用通配符$file,可以使用JS控制台加载到有权访问的文件夹(节点)中,但当尝试访问根文件目录时,它不会加载任何文件,而不会加载有权访问的节点。问题在于根目录上没有读写规则,而要呈现的函数需要获取该目录的值,然后加载该目录中的文件 我想知道是否有一种方法,获取目录的值会返回一个只包含有权访问的文件的值 我的意思是: firebase.database().ref('/shared-files/shared

我们有一个基本的云存储应用程序,现在支持共享文件。然而,在编写规则时,我遇到了一个问题:

使用通配符$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()"
            }
        }
      }
    }

看起来您希望将/shared files/shared/files下的子项筛选为用户有权访问的特定子项。你现在这样做是不可能的。如果有任何子级被拒绝访问,则整个读取将失败


相反,您需要做的是,根据规则中的逻辑,以这样一种方式组织数据,即客户机只能查询他们知道应该访问的项目。客户端筛选器必须与安全规则应用的限制相匹配。

感谢您的快速回答!使用基于查询的规则有效吗?我不知道你在问什么。我建议首先阅读文档的链接。是的,我在文档中找到了一个部分,上面写着基于查询的规则,这似乎就是我要找的