在Firebase规则中使用多个条件,并使用if语句不起作用

时间:2019-05-20 01:03:16

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

我的firebase规则中有多个条件,并且想通过在return语句中使用if语句来访问当前用户的数据库。当我单独访问它时,它可以工作,但是当我使用if语句时,我没有得到数据,但有权限错误问题。

我尝试访问它,但是一直失败。

我的规则:

"query.orderByChild == 'userId' && query.equalTo == auth.uid || 
root.child('admins').child(auth.uid).child('role').val() === 'admin'"

访问数据:

let db = firebase.database().ref(`/items`).orderByChild('userId').equalTo(currentUser.uid)

if(firebase.database().ref('/admins').child(currentUser.uid).child('role').equalTo('admin')) {
  db = firebase.database().ref(`/items`)
 }

db
.once('value')
.then(snapshot => {
    let doc = []
    const data = snapshot.val();
    for (let key in data) {

      doc.push({
        ...data[key],
        key: key
      });
    }

理想情况下,我想使用OR规则,并使用if / else语句根据用户返回数据。

1 个答案:

答案 0 :(得分:0)

此语句不执行您认为的操作:

if(firebase.database().ref('/admins').child(currentUser.uid).child('role').equalTo('admin'))

此行中的任何内容都不会从数据库中读取,equalTo构建查询,它实际上不执行任何检查。

如果要检查用户是否是管理员:

let userRoleRef = firebase.database().ref('/admins').child(currentUser.uid).child('role');
userRoleRef.once('value').then((snapshot) => {
  if ('admin' == snapshot.val()) {
    db = firebase.database().ref(`/items`)

    ... continue using db here
  }
}