如何使用firebase-bolt定义包含?

时间:2016-01-05 13:55:22

标签: firebase firebase-security firebase-realtime-database

我使用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
    ....

不确定是否可行。但我可以创建规则来仅编辑包含?

的字段

1 个答案:

答案 0 :(得分: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;
}

这可以使您的安全规则更简单,更加孤立。