2016-11-29 413 views
0

最近I asked a question about Firebase permissions變量:這是一個規則JSON樹:

{ 
    "rules": { 
    "Leaders":{ 
     "$leaderuid": { 
     ".write": "$leaderuid == auth.uid", 
     "DATA": { 
      ".write": "data.parent().child('ALLOWED').child(auth.uid).exists()" 
     } 
     } 
    } 
    } 
} 

實際的數據庫

{ 
    "Leaders" : { 
    "A" : { 
     "ALLOWED" : { 
     "b" : 0, 
     "c" : 0, 
     "d" : 0 
     }, 
     "DATA" : { 
     "blah blah1" : "content writable by bcd", 
     "blah blah2" : "content writable by bcd" 
     }, 
     "REQUESTS" : { 
     "E" : 0 
     } 
    } 
    } 
} 

我只是想幫助理解什麼$leaderuid手段。我閱讀過文檔,這是一個臨時變量。

我有一個想法,請糾正我或告訴我,我在想什麼是準確的。

創建的臨時變量$leaderuid是創建的領導者的authUID?

+0

它只是您的動態密鑰的領導者節點 –

回答

2

$變量擁有節點所擁有的任何關鍵字。所以,如果你有以下結構:

{ 
    "Leaders" : { 
    "A" : { 
     ... 
    }, 
    "B": { 
     ... 
    } 
    } 
} 

當你的安全規則A下進行評估,然後$leaderuidA。但是當規則在B下評估時,則$leaderuid將爲B

$變量的名稱不重要。但是由於您似乎在保留領導者名單,並且您說您將他們存儲在他們的UID下,所以我在之前的答案中將變量名稱命名爲$leaderuid

這包括在Firebase documentation on structuring data for securing user access。花費幾個小時在那裏和其他文檔中,應該回答很多您可能遇到的問題。

+0

謝謝!我更明白這一點。一個問題,但。 Firebase將如何檢查第一個是UID還是第二個或第三個....?從本質上講,$變量創建遞歸,它檢查所有的$ leaderuids並檢查當前的id是否匹配其中的任何一個? – DilllyBar

+0

規則總是在JSON樹中實際節點的上下文中進行評估。當您在規則中使用變量時(例如'$ leaderuid == auth.uid'),服務器將從該上下文節點向上搜索,直到找到聲明變量的位置並使用該密鑰。但說實話,在數據庫控制檯中使用規則模擬器開始播放時,這很難解釋並且更容易使用。 –