2015-10-23 125 views
2

所以我設置爲我的項目和用戶的火力點的安全規則已經閱讀到一個房間的訪問,我們需要確保它們是組織的一部分。所以我有這樣的安全規則:臨時變量規則

root.child('organizations').child(data.child('organization_id').val()).child('user_ids').hasChild(auth.uid)

這不僅是真醜,也有同樣的說法有好幾個其他規則(相隔& &/||),其中有與root.child('organizations').child(data.child('organization_id').val())開始訪問來自與此房間相關聯的組織變量的數據。

這導致了一些安全規則,有沒有什麼辦法可以使臨時變量或類似的東西,所以我可以使這更多的可讀性?謝謝!

回答

3

沒有。 Firebase安全規則語言不支持自定義變量。這確實導致了規則之間的大量重複。

最好的解決辦法是寫你的規則更高層次的語言,即編譯成火力地堡的安全規則。最知名的是Blaze(他們的大爸爸),Butane(不是來自Firebase本身)和Bolt(新的和非常活躍的開發)。

博爾特例如允許你定義(全球)functions,它可以很容易地封裝重複片段等等。

+0

這僅僅是那種我一直在尋找的東西,謝謝! – user1032369

+0

螺栓最有可能被採納爲未來推薦的方法。從那裏開始。 – Kato

1

在博爾特,你可以寫你的規則是這樣的:

type Room { 
    organization_id: String, 

    read() { isUserInOrg(this.organization_id) } 
} 

isUserInOrg(org_id) { root.organizations[org_id].user_ids[auth.uid] }