【问题标题】:Firebase, join pathsFirebase,加入路径
【发布时间】:2017-02-23 00:57:41
【问题描述】:

我有以下数据结构:

/users/$userId/profile/...
/users/$userId/job/...
/users/$userId/personal/... 

假设我想读取一些关于用户jobprofile 的数据并将其显示为列表。这里有2个(相关)问题:

1. 如何设置.read 安全规则。如果我说:

"users": { 
    ".read": "auth != null",
    ...
}

然后规则级联。为什么我不能在三个不同的路径下重复三次相同的规则?因为,然后在将路径连接在一起时出现错误。考虑一下:

var ref = fbutil.ref();     
var refSearch = new Firebase.util.NormalizedCollection(
                [ref.child('users'), 'usrId']
            ).select('usrId.job', 'usrId.profile').ref(); 
var result = refSearch.orderByChild("profile/name");
return $firebaseArray(result);

如果我在三个路径下有三个不同的规则,上面会失败,因为它无法读取usrId 本身。

2. 我不确定使用NormalizedCollection 是否是这里的最佳解决方案。有没有其他方法可以加入这两条路径?这也有助于解决第一个问题。

那么,如何在不使“/users/$userId”路径可读的情况下加入 2 路径(/users/$userId/profile//users/$userId/job/)?

【问题讨论】:

    标签: firebase firebase-realtime-database angularfire firebase-security firebase-util


    【解决方案1】:

    如果您需要区分公共数据和私有数据,请将其作为结构的一部分:

    {
        "rules": {
            "users": {
                "$user_id": {
                    private: {
                        ".read": "$user_id === auth.uid"
                    }
                    public: {
                        ".read": "true",
                        "job": {},
                        "profile": {}
                    }
                }
            }
        }
    }
    

    【讨论】:

    • Tnx @Jaime,但这无济于事。正如你所说,规则级联,所以,没有必要添加 $user_id。我希望允许用户查看其他用户的个人资料和工作,但不能查看个人数据。问题是当我尝试加入 2 条路径时。这样的连接需要userId 的读取权限,因此需要整个分支
    • 对不起,我没有理解你的问题的意图,编辑了我的答案:)
    • 谢谢杰米!有趣的是,我对其他字段有相同的结构,但对用户却没有。在我的情况下(我有来自其他路径的其他连接),userIds 应该在公共/私有(重复)下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    相关资源
    最近更新 更多