2013-10-22 52 views
23

Bu, Firebase & nosql'deki ilk adımımdır, SQL arka planından geliyorum.Firebase'de rol tabanlı erişim denetimini nasıl uygularım

Basit Giriş Güvenliği Kullanarak Güvenlik E-posta/Şifre, Firebase'deki verilere erişimi nasıl sınırlandırırım? Örneğin, bazı kullanıcılar bir işletme nesnesi (kullanıcılar, müşteriler, kategoriler, vb.) Oluşturmak için erişime sahip olacak, diğerleri olmayacak. "Auth" değişkenine bir izin listesi eklemenin bir yolu var mı?

cevap

24

İzinleri doğrudan yetkilendirme değişkenine eklemenin bir yolu yoktur (veya en azından bu amaçlanan bir strateji gibi görünmemektedir). Ben auth.uid tarafından düzenlenen kullanıcı topluluğu oluşturma öneriyoruz ve size güvenlik kuralları şey böyle (denenmemiş) görünebilir şekilde, orada istediğiniz nitelikleri izninin ne tür tutabilir:

{ 
    "rules": { 
    ".read": true, 
    "users": { 
     ".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'" 
    } 
    } 
} 

role olduğu yerlerde users koleksiyonunuzdaki tüm nesnelere ait bir özellik.

+0

sayesinde: Onlar da bir kullanıcıların erişim düzeylerini değiştirmek için yinelenen komut dosyaları varsa tüm kullanıcıları listelemek için programlı bir yol sağladı. Açıkçası, her kullanıcı kaydına eriştikleri kaynağa erişip erişmediklerini belirten bir boole değeri eklediğimi öneriyorsunuz. Bu doğru mu? Her türden bir iş nesnesinde (kullanıcılar, müşteriler, kategoriler, vb.) Benzer bir kural oluşturmam gerekir mi? – acole76

+3

Uygulama gereksinimlerinizi bilmeden tam olarak neye ihtiyacınız olduğunu bilmek zor, Firebase'de bu tür "izin verme" yöntemlerini nasıl yönetebileceğiniz konusunda genel stratejiyi aktarmaya çalışıyorum. Gerçek verileri nasıl yapılandıracağınıza bağlı olarak, bu kuralı birden çok kez kullanmanız gerekebilir veya olmayabilir. Ve her kullanıcı için bir boole ihtiyacı olabilir ya da olmayabilir, belki de "admin" 'gibi bir kullanıcı' string' dizgisine sahipler ve siz buna denksiniz. Ve belki sadece "yöneticiler" bu özelliğe ihtiyaç duyar, çünkü onsuz ayrıcalık varsayılan olarak başarısız olur. Neyi kastettiğimi anla? – hiattp

+0

Örneği daha net hale getirmek için güncelledim. – hiattp

5

Bunu bir yıl sonra tekrar inceledikten sonra "Custom Tokens" daha iyi bir seçenek olabilir.

{ 
    "rules": { 
    "adminContent": { 
     ".read": "auth.token.admin === true", 
     ".write": "auth.token.admin === true", 
    } 
    } 
} 

ayarlayın: https://firebase.google.com/docs/auth/admin/custom-claims

Sen yönetici erişim kuralı tanımlarsınız:

https://www.firebase.com/docs/security/guide/user-security.html#section-custom

+0

Bu yaklaşım güzel. Bahsettiğin için teşekkürler! – Rexford

+1

Özel belirteci kullanabilir ve istemci tarafında kullanıcı rolünü bildiğini iddia edebilir miyim (Web)? –

1

Firebase kimlik jetonu üzerinde özel kullanıcı hak talepleri yoluyla herhangi bir kullanıcı üzerinde rol tabanlı erişim desteği başlattı Firebase Yönetici SDK ile kullanıcı rolü:

// 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. 
}); 

Bu, ilgili kullanıcının kimlik belirteci iddialarına yayılacaktır. hemen sonra belirteç yenileme zorlayabilirsiniz: Gerektiğinde https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client

Sen/alçaltma kullanıcıları yükseltebilirsiniz: istemci üzerinde belirteci onu ayrıştırmak için user.getIdToken(true)

, sen base64 Kimlik jetonun yükü deşifre etmek gerekir. cevap için https://firebase.google.com/docs/auth/admin/manage-users#list_all_users

İlgili konular