Firebase Güvenlik Kuralları, birden fazla karmaşıklık düzeyini destekleyen bir formatta erişim kontrolü ve veri doğrulama sağlar. Kullanıcılarınızın verilerini güvende tutan kullanıcı tabanlı ve rol tabanlı erişim sistemleri oluşturmak için Firebase Güvenlik Kuralları ile Firebase Authentication'ı kullanın.
Kullanıcıları tanımlayın
Kimlik doğrulama, verilerinize erişim isteyen kullanıcıları tanımlar ve bu bilgileri, kurallarınızda kullanabileceğiniz bir değişken olarak sağlar. auth
değişkeni aşağıdaki bilgileri içerir:
-
uid
: İstekte bulunan kullanıcıya atanan benzersiz kullanıcı kimliği. -
token
: Kimlik Doğrulama tarafından toplanan değerlerin haritası.
auth.token
değişkeni aşağıdaki değerleri içerir:
Alan | Tanım |
---|---|
email | Varsa, hesapla ilişkili e-posta adresi. |
email_verified | true Kullanıcı email adresine erişimi olduğunu doğruladıysa. Bazı sağlayıcılar, sahip oldukları e-posta adreslerini otomatik olarak doğrular. |
phone_number | Varsa, hesapla ilişkili telefon numarası. |
name | Ayarlanmışsa kullanıcının görünen adı. |
sub | Kullanıcının Firebase UID'si. Bu, bir proje içinde benzersiz bir durumdur. |
firebase.identities | Bu kullanıcının hesabıyla ilişkili tüm kimliklerin sözlüğü. Sözlüğün anahtarları aşağıdakilerden herhangi biri olabilir: email , phone , google.com , facebook.com , github.com , twitter.com . Sözlüğün değerleri, hesapla ilişkili her kimlik sağlayıcı için benzersiz tanımlayıcılardan oluşan dizilerdir. Örneğin auth.token.firebase.identities["google.com"][0] hesapla ilişkilendirilen ilk Google kullanıcı kimliğini içerir. |
firebase.sign_in_provider | Bu belirteci almak için kullanılan oturum açma sağlayıcısı. Şu dizelerden biri olabilir: custom , password , phone , anonymous , google.com , facebook.com , github.com , twitter.com . |
firebase.tenant | Varsa, hesapla ilişkili kiracı kimliği. örneğin tenant2-m6tyz |
Özelleştirilmiş kimlik doğrulama öznitelikleri eklemek istiyorsanız auth.token
değişkeni aynı zamanda belirttiğiniz tüm özel talepleri de içerir.
Erişim isteyen kullanıcı oturum açmadığında auth
değişkeni null
olur. Örneğin, okuma erişimini kimliği doğrulanmış kullanıcılarla sınırlamak istiyorsanız kurallarınızda bundan yararlanabilirsiniz - auth != null
. Ancak genellikle yazma erişimini daha da sınırlandırmanızı öneririz.
auth
değişkeni hakkında daha fazla bilgi için Cloud Firestore , Realtime Database ve Cloud Storage'a ilişkin referans belgelerine bakın.
Kurallarda kullanıcı bilgilerinden yararlanın
Uygulamada, kurallarınızda kimliği doğrulanmış bilgilerin kullanılması, kurallarınızı daha güçlü ve esnek hale getirir. Kullanıcı kimliğine göre verilere erişimi kontrol edebilirsiniz.
Kurallarınızda, auth
doğrulama değişkenindeki bilgilerin (istek sahibinin kullanıcı bilgileri) istenen verilerle ilişkili kullanıcı bilgileriyle nasıl eşleşeceğini tanımlayın.
Örneğin, uygulamanız kullanıcıların yalnızca kendi verilerini okuyup yazabildiğinden emin olmak isteyebilir. Bu senaryoda, istenen verilerdeki auth.uid
değişkeni ile kullanıcı kimliği arasında bir eşleşme olmasını istersiniz:
Bulut Firestore
service cloud.firestore {
match /databases/{database}/documents {
// Make sure the uid of the requesting user matches name of the user
// document. The wildcard expression {userId} makes the userId variable
// available in rules.
match /users/{userId} {
allow read, write: if request.auth != null && request.auth.uid == userId;
}
}
}
Gerçek Zamanlı Veritabanı
{
"rules": {
"users": {
"$userId": {
// grants write access to the owner of this user account
// whose uid must exactly match the key ($userId)
".write": "$userId === auth.uid"
}
}
}
}
Bulut depolama
service firebase.storage {
// Only a user can upload their file, but anyone can view it
match /users/{userId}/{fileName} {
allow read;
allow write: if request.auth != null && request.auth.uid == userId;
}
}
Özel kullanıcı bilgilerini tanımlayın
Uygulamanızın kullanıcılarına atanan özel alanları tanımlamak için auth
değişkeninden daha fazla yararlanabilirsiniz.
Örneğin, belirli yollara yazma erişimi sağlayan bir "yönetici" rolü oluşturmak istediğinizi varsayalım. Bu özelliği kullanıcılara atar ve ardından yollara erişim izni veren kurallarda bundan yararlanırsınız.
Cloud Firestore'da, kullanıcıların belgelerine özel bir alan ekleyebilir ve kurallarınızdaki yerleşik okumayla bu alanın değerini alabilirsiniz. Yani yönetici tabanlı kuralınız aşağıdaki örneğe benzeyecektir:
Bulut Firestore
service cloud.firestore {
match /databases/{database}/documents/some_collection: {
// Remember that, in Cloud Firestore, reads embedded in your rules are billed operations
write: if request.auth != null && get(/databases/(database)/documents/users/$(request.auth.uid)).data.admin == true;
read: if request.auth != null;
}
}
Kimlik Doğrulama'da özel talepler oluşturduktan sonra Kurallar'da özel taleplere erişebilirsiniz. Daha sonra auth.token
değişkenini kullanarak bu özel taleplere başvurabilirsiniz.
Bulut Firestore
service cloud.firestore {
match /databases/{database}/documents {
// For attribute-based access control, check for an admin claim
allow write: if request.auth.token.admin == true;
allow read: true;
// Alterntatively, for role-based access, assign specific roles to users
match /some_collection/{document} {
allow read: if request.auth.token.reader == "true";
allow write: if request.auth.token.writer == "true";
}
}
}
Gerçek Zamanlı Veritabanı
{
"rules": {
"some_path/$sub_path": {
// Create a custom claim for the admin role
".write": "auth.uid !== null && auth.token.writer === true"
".read": "auth.uid !== null"
}
}
}
Bulut depolama
service firebase.storage {
// Create a custom claim for the admin role
match /files/{fileName} {
allow read: if request.auth.uid != null;
allow write: if request.auth.token.admin == true;
}
}
Kimlik Doğrulamadan yararlanan temel Kurallara ilişkin daha fazla örnek görmek için bkz. Temel Güvenlik Kuralları .