2016-01-05 5 views
2

Я использую firebase-bolt, чтобы установить свои правила.Как определить, содержит ли с помощью firebase-bolt?

Мой болт:

// ######## CONTENTS 
path /contents { 
    read() = true; 
    index() = ["dt_created"]; 
} 

path /contents/$id is Timestamped<Contents> { 
    write() = isSignedIn() && isAllowEdit(this); 
} 

type Contents { 
    text : String, 
    address : String, 
    organization: String | Null, 
    location: String | Null, 
    map_lat : String, 
    map_lng : String, 
    num_favorite: Number, 
    num_comment: Number, 
    num_denounce: Number, 
    removed: Boolean, 
    category_id : String, 
    user_id : String, 
    photos: String[] 
} 

// 
// Helper Functions 
// 
isSignedIn() = auth != null; 
isAllowEdit(value) = (prior(value) == null || newData.child('user_id').val() == auth.uid); 

Я хотел бы только владелец пост может редактировать, но любой может обновить счетчики.

Я думаю:

"contents": { 
    "$id": { 
    "num_favorite": { 
     ".write": true 
    .... 

Не уверен, если это возможно. Но могу ли я создавать правила для редактирования только поля с содержимым?

ответ

3

Это в обычных правилах Firebase безопасности:

"contents": { 
    "$id": { 
    "num_favorite": { 
     ".write": true 
    } 

Переводит к этому на Болт:

path /contents/$id/num_favorite { 
    write() = true; 
} 

Это будет работать, потому что вы добавление нового разрешения и не пытается удалите существующее разрешение (которое равно not possible in Firebase's security rules language).

Но я хотел бы рассмотреть отделяя голос в отдельный узел верхнего уровня:

path /favorite_counts/$id { 
    write() = true; 
} 

Это сохраняет ваши правила безопасности проще и изолированы друг от друга.