2015-07-31 23 views
5

değiştirmek okuyun.Firebase kullanıcı ben Firebase sonraki senaryo var hepsi, yeni yazma, ancak sadece kendi verilerini

Ben Kullanıcılar, yeni Olaylar oluşturmak mevcut tüm olayları görebilir, ancak yalnızca onlar tarafından oluşturulan yalnızca olayları modifiye edebilmesi mümkün olmak istiyorum.

UserOne tarafından EventOne oluşturulduğu anlamı, EventOne ve EventTwo öğelerini görebilir, ancak yalnızca EventOne'u değiştirebilir.

-events 
-eventOne 
    endTime: 
    id: 
    name: 
    providerId: 
    startTime: 
    userId: 
-eventTwo 
    endTime: 
    id: 
    name: 
    providerId: 
    startTime: 
    userId: 
-users 
    -userOne 
    -userTwo 

Ve benim şimdiki kurallar hemen hemen varsayılan olanlardır: önceden

{ 
    "rules": { 
    "users": { 
     "$uid": { 
     // grants write access to the owner of this user account whose uid must exactly match the key ($uid) 
     ".write": "auth !== null && auth.uid === $uid", 
     // grants read access to any user who is logged in with an email and password 
     ".read": "auth != null && auth.uid == $uid" 
     } 
    }, 
    "events": { 
     ".read": "auth != null", 
     ".write": "auth != null" 
    } 
    } 
} 

Teşekkür şöyle

Benim yapıdır.

cevap

8

Tüm kullanıcıların tüm olayları görebildiğinden emin olmak için, okuyucular için en az kimlik doğrulaması yapmak istiyorsanız, olayların okunması kuralını true veya auth != null olarak ayarlayabilirsiniz.

Olayların yalnızca kendi oluşturucuları tarafından değiştirilebildiğinden emin olmak için, orijinal yazarı etkinliğin yanında kaydedin ve auth.uid kullanarak doğrulayın.

{ 
    "rules": { 
    "events": { 
     "$eventid": { 
     ".read": "auth != null", 
     ".write": "auth != null && (!data.exists() || data.child('author').val() === auth.uid) && newData.hasChild('author')", 
     "author": { 
      ".write": "newData.val() === auth.uid" 
     } 
     } 
    } 
    } 
} 

şeyden biz bu konumda mevcut bir olay olup olmadığını kontrol etmek için !data.exists() kullanın. Hiçbir etkinlik yoksa, bu konuma herhangi bir kişi eklenebilir. Ardından, data.child('author').val() === auth.uid, bir olay varsa, yalnızca yazarın bunu değiştirebilmesini sağlar. hızlı cevap için

+0

Teşekkür !, ve sadece ' ".read 'eklemek zorunda:' auth = null"' Onlar – Vazh

+0

okunabilir 'kurallar' emin olmak için aşağıdaki eğer aynı öyle i .validate'de newData.hasChild ('author') 'öğesini ayarlayın – vzhen

+0

@vzhen Aynı zamanda 'yazar' değerinin, olmasını istediğinizle eşleştiğini doğruladığınız sürece (örn., Kimlik belirteçinde bir şey). –