2016-12-15 95 views
0

我們能否使用火力地堡數據庫規則通配符?從我的實驗來看,似乎並非如此。我錯過了什麼或者是應該發生什麼?通配符在火力地堡數據庫規則

所以,舉例來說,我可能對所有products_*項相同的規則,它會更容易在一起使用通配符組。

要澄清,這是一個web應用程序,我關心的是,我們在控制檯設置數據庫權限。我們可以在那裏使用通配符嗎?

例如,

{ 
"rules": { 
    "products_A": { 
     <rules> 
    }, 
    "products_B": { 
     <rules> 
    } 
} 

我想只有1套,喜歡的規則:

{ 
"rules": { 
    "products_*": { 
     <rules> 
    } 
} 

感謝。

+2

安置自己的規則文本請,沒有圖像以及你試圖通過通配符完成的事情,因爲可能有解決方案。 – Jay

+0

@Jay,澄清更新! – Ahsan

+2

我發佈了一個奇妙的答案,但因爲我突然忘記了如何閱讀它是完全錯誤的問題。在那個筆記上......現在還不清楚問題的癥結所在 - 大多數firebase規則使用佔位符來引用封閉的父節點。也許你可以發佈你當前的規則,並描述你在做什麼。 – Jay

回答

5

火力地堡提供用於表示ID和動態子鍵通配符路徑。例如,下面的規則中的$ uid是一個'通配符',它允許該節點中的參數引用父節點。

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     ".write": "$uid === auth.uid" 
     } 
    } 
    } 
} 

在上例中,$ uid是/ users節點內每個用戶節點的通配符路徑。以下是每個節點如何擴展上述規則:

users 
    uid_0 <--------| 
       V 
    ".write": "uid_0 === auth.uid" //only user with uid = uid_0 can write 
    uid_1 
    ".write": "uid_1 === auth.uid" //only user with uid = uid_1 can write 
    uid_2 
    ".write": "uid_2 === auth.uid" //only user with uid = uid_1 can write 

您可以對此進行擴展以提供極大的靈活性。假設你想讓一定數量的用戶能夠訪問組節點。組規則可以是

"rules": { 
    "Groups": { 
     "$group_id" : { 
     ".read": "root.child('Allowed_Users/' + auth.uid).val() === $group_id", 
     ".write": "root.child('Allowed_Users/' + auth.uid).val() === $group_id" 
     } 
    } 

這將每個組節點的訪問權限限制爲在Allowed_Users節點中指定的某個用戶組。在火力地堡數據庫中的數據可能看起來像:

Groups 
    group_0 
    //data 
    group_1 
    //data 


Allowed_Users 
    uid_0: group_0 
    uid_1: group_0 

是這個例子中,用戶uid_0和uid_1能讀/寫group_0但不讀/寫GROUP_1