实施Firebase规则的最佳方法是什么?我的不工作

时间:2018-08-23 10:20:11

标签: firebase firebase-realtime-database angularfire2 firebase-security-rules role-base-authorization

这是我的基地规则

{
  "rules": {
    ".read": "auth != null",
    ".write": "root.child('users/auth.id/user_type').val() == 'admin'"
  }
}

我的用户节点。 (数据是伪造的)

{
  "users" : {
    "2anxMpsdsxsd5K2" : {
      "user_email" : "dsds@gmail.com",
      "user_name" : "dsd",
      "user_photo_url" : "somepic.jpg",
      "user_roles" : {
        "writer" : true
      }
    },
    "z8uzffddelsSl1" : {
      "user_email" : "xcxc@gmail.com",
      "user_name" : "xcxc",
      "user_photo_url" : "fb-picture",
      "user_type" : "admin"
    }
  }
}

我尝试过使用用户角色,但仍然无法编写。我的规则会是错误的吗?

1 个答案:

答案 0 :(得分:1)

这就是我想出的。

{
  "rules": {

        "users": {
      ".read": "auth != null",
      "$user_id": {

        ".write": "auth.uid == $user_id || root.child('users').child(auth.uid).child('user_type').val() == 'admin'"
      }
    },
    // "news": {
    //   "$news_id": {
    //     ".read": "auth != null",
    //     ".write": "auth.uid == root.child('news').child($news_id).child('news_author_id').val() || root.child('users').child(auth.uid).child('user_type').val() == 'news_contributor' || root.child('users').child(auth.uid).child('user_type').val() == 'admin' "
    //   }
    // },

    "programs": {
      ".read": "auth != null",
      "courses": {
                "$course_id": {

          ".write": "auth.uid == root.child('programs').child('courses').child($course_id).child('program_author_id').val() || root.child('users').child(auth.uid).child('user_type').val() == 'admin'"
        }
      },
      "tracks": {
        ".read": "auth != null",
                "$track_id": {

          ".write": "auth.uid == root.child('programs').child('tracks').child($track_id).child('program_author_id').val() || root.child('users').child(auth.uid).child('user_type').val() == 'program_contributor' ||  root.child('users').child(auth.uid).child('user_type').val() == 'admin'"
        }
      }
    },

    "news": {
      ".read": "auth != null",
      "$news_id": {

        ".write": "root.child('users').child(auth.uid).child('user_type').val() == 'news_contributor' || auth.uid == root.child('news').child($news_id).child('news_author_id').val() == auth.uid || root.child('users').child(auth.uid).child('user_type').val() == 'admin'"
      }
    }
  }
}

一个问题。

此错误弹出 错误TS7027:检测到无法访问的代码。