2013-01-23 144 views

回答

31

有在火力地堡「組」沒有明確的支持,因爲你可以很容易地自己代表他們。這有兩種選擇,取決於你的情況。

將羣組信息存儲在firebase中。

以下數據可以用來表示2組( '阿爾法' 和 '測試')和3個受保護數據( 'thing1', 'thing2' 和 'thing3')

{ 
    "groups": { 
    "alpha": { 
     "joe": true, 
     "sally": true 
    }, 
    "beta": { 
     "joe": true, 
     "fred": true 
    } 
    }, 
    "data": { 
    "thing1": { 
     "group": "alpha" 
     /* data accessible only by the "alpha" group */ 
    }, 
    "thing2": { 
     "group": "beta" 
     /* data accessible only by the "beta" group */ 
    }, 
    "thing3": { 
     "group": "alpha" 
     /* more data accessible by the "alpha" group */ 
    } 
    } 
} 

然後我們可以使用下面的規則來執行安全:

{ 
    "rules": { 
    "data": { 
     "$thing": { 
     ".read": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)", 
     ".write": "root.child('groups').child(data.child('group').val()).hasChild(auth.id)" 
     } 
    } 
    } 
} 

所以後來如果我跟{ID:「莎莉」}認證爲我的身份驗證對象,我將有機會獲得thing1和thing3,但不thing2。

將組信息存儲在身份驗證令牌中。

如果您正在生成自己的身份驗證令牌,並且您知道用戶在授權時所處的組,則可以將組列表存儲在您生成的身份驗證令牌中。例如,當您爲用戶'fred'生成身份驗證令牌時,請包括「{id:'fred',groups:{alpha:true,beta:true}}」

然後,您可以通過以下方式強制執行組成員身份驗證:

{ 
    "rules": { 
    "data": { 
     "$thing": { 
     ".read": "auth[data.child('group').val()] != null", 
     ".write": "auth[data.child('group').val()] != null" 
     } 
    } 
    } 
} 
+0

Michael,感謝您的快速響應,第一個選項是我們正在尋找的。 – user1452215

+1

如果你想授予對數據的訪問權限,那麼多個組(而不是僅僅一個)是多少錢?有沒有像.hasAnyChild()或類似的東西? – Pl4yeR

+0

第一個JSON對象到底在哪裏?定義組,alpha,beta等?我不認爲你可以把它放入實際的規則安全對象中......除非我錯過了某些東西? – Matt

相關問題