這是我第一次進入Firebase & nosql,我來自SQL背景。如何在firebase中實現基於角色的訪問控制
使用簡單登錄安全電子郵件/密碼,如何限制對Firebase中數據的訪問?例如,某些用戶將有權創建業務對象(用戶,客戶,類別等),而其他用戶則不能。有沒有辦法將權限列表附加到「auth」變量?
這是我第一次進入Firebase & nosql,我來自SQL背景。如何在firebase中實現基於角色的訪問控制
使用簡單登錄安全電子郵件/密碼,如何限制對Firebase中數據的訪問?例如,某些用戶將有權創建業務對象(用戶,客戶,類別等),而其他用戶則不能。有沒有辦法將權限列表附加到「auth」變量?
沒有辦法將權限直接附加到auth變量(或者至少看起來並不是預期的策略)。我建議建立由auth.uid
組織用戶的集合,你可以讓你在想有什麼樣的權限屬性,這樣你的安全規則可能的東西看起來像這樣(未經):
{
"rules": {
".read": true,
"users": {
".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'"
}
}
}
哪裏role
是屬於您的users
集合中所有對象的屬性。
一年後再看一遍「自定義令牌」可能是更好的選擇。
https://www.firebase.com/docs/security/guide/user-security.html#section-custom
這種做法很美。感謝提及! – Rexford
我可以使用自定義令牌和聲明來了解客戶端(Web)上的用戶角色嗎? –
火力地堡推出通過ID令牌上的自定義用戶權利上的任何用戶基於角色的訪問支持:https://firebase.google.com/docs/auth/admin/custom-claims
您需要定義管理員訪問規則:
{
"rules": {
"adminContent": {
".read": "auth.token.admin === true",
".write": "auth.token.admin === true",
}
}
}
設置使用Firebase Admin SDK的用戶角色:
// Set admin privilege on the user corresponding to uid.
admin.auth().setCustomUserClaims(uid, {admin: true}).then(() => {
// The new custom claims will propagate to the user's ID token the
// next time a new one is issued.
});
這將傳播到相應的用戶的ID令牌聲明。 您可以強制刷新令牌後立即:user.getIdToken(true)
要從客戶端上的令牌解析它,你需要爲base64解碼ID令牌的有效載荷:https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client
您可以根據需要升級/降級的用戶。他們還提供了編程方式來列出所有用戶,如果您有重複腳本來更改用戶的訪問級別:https://firebase.google.com/docs/auth/admin/manage-users#list_all_users
謝謝您的迴應。我清楚地知道,您建議我爲每個用戶記錄添加一個布爾值,以指示他們是否有權訪問他們正在訪問的資源。那是對的嗎?我是否需要爲每種類型的業務對象(用戶,客戶,類別等)創建類似的規則? – acole76
如果不知道自己的應用需求,很難知道您需要什麼,我只是試圖傳達您如何在Firebase中管理這種「許可」的一般策略。根據您構建實際數據的方式,您可能需要或可能不需要多次使用該規則。你可能需要也可能不需要每個用戶的布爾值,也許他們只有一個用戶類型字符串,比如「admin」',並且你匹配。也許只有「管理員」需要該屬性,因爲沒有它,權限將默認失敗。明白了嗎? – hiattp
我更新了示例以使其更加清晰。 – hiattp