首页 > 解决方案 > 如何指定规则以允许任何人读取某个键/值对

问题描述

我试图让任何用户只看到nameandemail参数。

    "users": {
        "kanyesUID": {
            "name": "Kanye West",
            "email": "kwest@gmail.com",
            "sensitive_info": "a"
        },
        "taylorsUID": {
            "name": "Taylor Swift",
            "email": "tswift@gmail.com",
            "sensitive_info": "a"
        },
        "seacrestsUID": {
            "name": "Ryan Seacrest",
            "email": "rseacrest@gmail.com",
            "isAdmin": true
        }
     }

对于以下代码,我应该得到这个输出:

        "kanyesUID": {
            "name": "Kanye West",
            "email": "kwest@gmail.com"
        },
        "taylorsUID": {
            "name": "Taylor Swift",
            "email": "tswift@gmail.com"
        },
        "seacrestsUID": {
            "name": "Ryan Seacrest",
            "email": "rseacrest@gmail.com"
        }
firebase.database().ref('/users/').once('value').then(function(snapshot) {
    print_snapshot_json(snapshot);
});

需要什么规则才能让这种情况发生?

标签: firebasefirebase-realtime-databasefirebase-authentication

解决方案


您不能使用安全规则执行此操作。您正在尝试使用安全规则作为过滤器来确定哪些字段将出现在搜索结果中,但这不受支持。查询必须能够读取查询将返回的所有数据。您可以做的是将每个用户的公共和私有字段拆分为单独的顶级节点,以便可以单独查询和保护它们。

有关更多详细信息,请阅读文档,特别是标题为“规则不是过滤器”的部分。


推荐阅读